Menu
CoddyTech

House Robber

בינוניתכנון דינמיpython iconjava iconcpp iconc iconjs icon+10

בתים עומדים בשורה לאורך רחוב, ו־nums[i] הוא סכום הכסף בבית i. אפשר לקחת כסף מכל הבתים שתבחרו, אך לעולם לא משני בתים שעומדים זה לצד זה. החזירו את הסכום הכולל הגדול ביותר שאפשר לקחת.

פונקציה

rob(nums: integer-array) → integer
numsinteger-array
הכסף בכל בית, לפי סדר הרחוב
מחזירהinteger
הסכום הגדול ביותר שאפשר לקחת בלי לקחת משני בתים סמוכים

אילוצים

  • 1 ≤ nums.length ≤ 104
  • 0 ≤ nums[i] ≤ 1000
  • התשובה היא לכל היותר 5 × 106, ולכן היא נכנסת למספר שלם חתום בן 32 סיביות.

דוגמאות

קלט
nums = [5, 3, 4, 11, 2]
פלט
16
הסבר
קחו 5 ו־11 מבתים 0 ו־3, וקבלו 16. מותר לדלג על שני בתים ברצף, וכאן האפשרות הזאת עדיפה על כל תוכנית אחרת: 5 + 4 + 2 = 11 ו־3 + 11 = 14.

lock icon+16 בדיקות נסתרות בשליחה

challenge icon

שאלת המשך

החזר את הבתים שיש לקחת וגם את הסכום הכולל. מה צריך לשמור מהטבלה כדי לבנות מחדש את הרשימה הזאת, והאם שני הסכומים המצטברים עדיין מספיקים לכך?

איפוס הקוד
def rob(nums):
    # כתבו את הקוד כאן
מקרי בדיקה

מקרה 1

מקרה 2

מקרה 3

קלט

nums = [5, 3, 4, 11, 2]

צפוי

16