LeetCode-探索-初级算法-动态规划-4. 打家劫舍(个人做题记录,不是习题讲解)

LeetCode-探索-初级算法-动态规划-4. 打家劫舍(个人做题记录,不是习题讲解)

LeetCode探索-初级算法:https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/

  1. 打家劫舍
  • 语言:java

  • 思路:假设总共5个,那么第5个获取的最大值就是第3个能获取到的最大值加上第5个or第4个的最大值;第3个的最大值就是第1个+自己,或者第2个;

    即第n个的最大值情况有两种:

    第一种是第n-2最大值+自己

    第二种是第n-1最大值(因为n-1往回推的情况比自己这条路线好)

  • 代码(0ms):

    class Solution {
        public int rob(int[] nums) {
            if(nums.length == 0)
                return 0;
            if(nums.length == 1)
                return nums[0];
            if(nums.length == 2)
                return Math.max(nums[0],nums[1]);
            int[] tmp = new int[nums.length];
            tmp[0] = nums[0];
            tmp[1] = Math.max(nums[0],nums[1]);
            for(int i = 2; i < nums.length; ++i){
                int t = nums[i] + tmp[i-2];            
                if(t<tmp[i-1])
                    tmp[i] = tmp[i-1];
                else
                    tmp[i] = t;
            }
            return tmp[nums.length-1];
        }
    }
    
  • 参考代码(0ms):这个参考代码和我的思路差不多,只不过他变成n[i]一定是以nums[i]结尾,而我是n[i]就是第i时的最大情况

    class Solution {
        public int rob(int[] nums) {
            if (nums == null || nums.length == 0) {
                return 0;
            }
            if (nums.length == 1) {
                return nums[0];
            }
            if (nums.length == 2) {
                return Math.max(nums[0], nums[1]);
            }
            // dp[i] 以 nums[i]为最后一个数字的金额
            int[] dp = new int[nums.length];
            int maxAmount = Math.max(nums[0], nums[1]);
            dp[0] = nums[0];
            dp[1] = nums[1];
            for (int i = 2; i < nums.length; i++) {
                
                if (i >= 3) {
                    dp[i] = Math.max(dp[i - 2], dp[i - 3]) + nums[i];
                } else {
                    dp[i] = dp[i - 2] + nums[i];
                }
                maxAmount = Math.max(maxAmount, dp[i]);
            }
            return maxAmount;
        }
    }
    
发布了60 篇原创文章 · 获赞 6 · 访问量 5524

猜你喜欢

转载自blog.csdn.net/Ashiamd/article/details/102473225
今日推荐