leetcode:那些年我遇到过的编程题010:按摩师

leetcode:那些年我遇到过的编程题010:按摩师在这里插入图片描述审完题目,大概就是让我们在一个数组中找出来互不相临的数相加的最大值。虽然想到了用动态规划,但是最后代码怎么都写不出来…

class Solution {
    int max = 0
    public int massage(int[] nums) {
        Set<Integer> list = new HashSet<>(nums.length);
        for{int i = 0;i<nums.length;i++}{
            if(!list.contains(i-1)&&!list.contains(i+1)){
                list.add[i];
                max+=nums[i];
            }
        }
        if(i<nums.length){
            Select(i);
        }
    }
    public void Select(i){
        
    }
}

看了答案之后又仔细想了想再动键盘

class Solution {
    public int massage(int[] nums) {
        int n = nums.length;
        if(n == 0) return 0;
        if(n == 1){return nums[0];}
        int sdp0 = 0,sdp1= nums[0];
        for(int i =1;i<n;i++){
            int dp0 = Math.max(sdp0,sdp1);
            int dp1 = sdp0 + nums[i];
            sdp0 = dp0;
            sdp1 = dp1;
        }
        return Math.max(sdp0,sdp1);
    }
}

在这里插入图片描述总结一下,动态规划主要就是要弄清楚现在的状态和上一个状态之间的关系,分出几种情况来讨论,再写代码,思路会清晰很多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值