今天继续刷LeetCode,第198题,求给定的一个数组中,和最大的一组数,这组数中每个数不能相邻。
分析:
这是一个典型的动态规划的问题,设置一个最大的容器,用来存放目前为止前一次和前两次的最大和,然后比较当前的值与前面一次,还是前两次的和哪个大,就赋值给新的最大容器内当前位置。
问题:
1、容器的使用;
2、动态规划的使用;
附上C++代码:
class Solution {
public:
int rob(vector<int>& nums) {
int n=nums.size();
if(n==0)
return 0;
else if(n==1)
return nums[0];
else
{
vector<int> maxV(n,0);
maxV[0]=nums[0];
maxV[1]=max(nums[0],nums[1]);
for(int i=2;i<n;i++)
maxV[i]=max(maxV[i-2]+nums[i],maxV[i-1]);
return maxV[n-1];
}
}
};
附上python代码:
class Solution:
def rob(self, nums: List[int]) -> int:
ln=len(nums)
maxResult=[0 for each in nums]
if ln==0:
return 0
elif ln==1:
return nums[0]
elif ln==2:
return max(nums[0],nums[1])
else:
maxResult[0]=nums[0]
maxResult[1]=max(nums[0],nums[1])
for i in range(2,ln):
maxResult[i]=max(maxResult[i-1],maxResult[i-2]+nums[i])
return maxResult[-1]
作者继续刷LeetCode第198题,该题要求在给定数组中找出和最大且数不相邻的一组数,这是典型的动态规划问题。解题时设置最大容器存放前一次和前两次的最大和,比较当前值与前面一次或前两次和的大小并赋值。还提及容器和动态规划的使用,最后附上C++和Python代码。
3254

被折叠的 条评论
为什么被折叠?



