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

作者继续刷LeetCode第198题,该题要求在给定数组中找出和最大且数不相邻的一组数,这是典型的动态规划问题。解题时设置最大容器存放前一次和前两次的最大和,比较当前值与前面一次或前两次和的大小并赋值。还提及容器和动态规划的使用,最后附上C++和Python代码。

今天继续刷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]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值