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.
challenge icon

שאלת המשך

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

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

בדיקה #1

בדיקה #2

בדיקה #3

ארגומנט

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

הפלט הצפוי

16