零基礎leetcode刷刷刷
大圈兒每日一leetcode刷題計畫,從今日起,安排上了!要堅持啊,衝吖~
好的,廢話不多說了,因為是第一遍刷題,所以就只是記錄了自己能夠消化的思路。
這是乙個動態規劃問題,在當前狀態採取的行動可根據前面狀態採取的行動來決定。在該問題中,小偷不能偷相鄰的房子,那麼對於第m (m>2) 個房子來說:
偷第m個房子,則第(m-1)的房子不能偷,因此,此時偷竊總金額為前(m-2)個房子的最大金額總和加上當前房子裡的金額,即:dp_sum[m-2] + dp[m];
不偷第m個房子,則偷竊總金額為前(m-1)個房子的最大金額總和。
在1和2選項中,選擇金額最大的即為當前狀態下的偷竊到的最高金額。
因此,可得到狀態轉移方程:dp_sum[m] = max(dp_sum[m-2]+nums[m], dp_sum[m-1]);
再考慮邊界條件:1)只有1個房子,dp_sum[0] = nums[0];2)只有2個房子,dp_sum[1] = max(nums[0], nums[1]),小偷肯定是要偷錢多的那家啦~
class solution
if(n == 1)
if(n == 2)
vectordp(n);
dp[0] = nums[0];
dp[1] = max(nums[0], nums[1]);
for(int i=2; i今天這個題目算是初識動態規劃問題啦,以後遇到類似的問題可借鑑該思路,而不必把問題想得過於繁瑣複雜~
LeetCode每日一解
本著練習的目的,建議不要取巧,勝一時易,時時勝難 難點 nums去重之後為什麼會改變陣列大小 what?val是去重後的索引,但nums是素組啊,列印這個索引出現了陣列 個人理解 我是長度,超過的刪除 int len removeduplicates nums 說明 為什麼返回數值是整數,但輸出的答...
Leetcode 每日一道
如果不出意外每天會寫一道演算法題的部落格。如果題目簡單,就一天發布一道。如果題目比較難。我會2 3天發一道演算法的題目。今天寫的這道題目比較簡單。題目如下 解法我是用c 寫的。我的解法的大致想法是 先把需要轉換的矩陣直接轉換成一維的陣列,然後再根據要求把一維中的元素全部截為以c個元素為一組的vect...
leetcode每日一刷
給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。class solution object deftwosum self,nums,target ...