Python實現 打家劫舍 的一種方法

2021-08-28 05:59:16 字數 1723 閱讀 4447

你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警

給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額

example 1:

input:[1,2,3,1]output:4explanation:rob house 1 (money = 1) and then rob house 3 (money = 3).

total amount you can rob = 1 + 3 = 4.

example 2:

input:[2,7,9,3,1]output:12explanation:rob house 1 (money = 2), rob house 3 (money = 9) and rob house 5 (money = 1).

total amount you can rob = 2 + 9 + 1 = 12.

我們先拿乙個簡單的例子來分析一下,比如說nums為,那麼我們來看我們的dp陣列應該是什麼樣的,首先dp[0]=3沒啥疑問,再看dp[1]是多少呢,由於3比2大,所以我們搶第乙個房子的3,當前房子的2不搶,所以dp[1]=3,那麼再來看dp[2],由於不能搶相鄰的,所以我們可以用再前面的乙個的dp值加上當前的房間值,和當前房間的前面乙個dp值比較,取較大值當做當前dp值,所以我們可以得到遞推公式dp[i] = max(num[i] + dp[i - 2], dp[i - 1])

def rob(self, nums):

""":type nums: list[int]

:rtype: int

"""if not nums:

return 0

if len(nums)==1:

return nums[0]

sumlist = [nums[0]] #存放盜竊的每乙個房間的最大收益

for i in range(2,len(nums)):

return sumlist[-1]

def rob(self, nums):

""":type nums: list[int]

:rtype: int

"""if not nums:

return 0

if len(nums)==1:

return nums[0]

first = nums[0]

second = max(nums[0], nums[1])

for i in range(2,len(nums)):

second, first = max(first+nums[i], second), second #該寫法和注釋的效果一樣

# temp = second

# second = max(first+nums[i], second)

# first = temp

return second

演算法題來自:

一種分頁的實現

以下 是一種分頁的實現。分別是檔案page.php和page.css。分頁的糾結點在於分頁條中省略號的顯示。實現的基本邏輯是 1,接收瀏覽器端傳過來的想要顯示的頁碼數 page。page get p 2,根據頁碼數 page 以及固定的每頁顯示數 pagesize 從資料庫中取資料。sql sele...

Python實現全排列的一種演算法

列表arr 1,2,3 輸出其全排列。採取遞迴推導的方法來實現。def perm arr 實現全排列 length len arr if length 1 遞迴出口 return arr result 儲存結果 fixed arr 0 rest arr 1 for arr in perm rest ...

Python實現 找不同 的一種方法

給定兩個字串s和t,它們只包含小寫字母。字串t由字串s隨機重排,然後在隨機位置新增乙個字母。請找出在t中被新增的字母 example input s abcd t abcde output eexplanation e is the letter that was added.def findthe...