LeetCode探索之旅(55)-198打家劫舍

今天继续刷LeetCode,第198题,求给定的一个数组中,和最大的一组数,这组数中每个数不能相邻。

分析:
这是一个典型的动态规划的问题,设置一个最大的容器,用来存放目前为止前一次和前两次的最大和,然后比较当前的值与前面一次,还是前两次的和哪个大,就赋值给新的最大容器内当前位置。

问题:
1、容器的使用;
2、动态规划的使用;

附上C++代码:

class Solution {
public:
    int rob(vector& nums) {
        int n=nums.size();
        if(n==0)
            return 0;
        else if(n==1)
            return nums[0];
        else
        {
            vector maxV(n,0);
            maxV[0]=nums[0];
            maxV[1]=max(nums[0],nums[1]);
            for(int i=2;i

附上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]

你可能感兴趣的:(代码训练)