Skip to content

Instantly share code, notes, and snippets.

@mekefly
Created October 14, 2022 18:29
Show Gist options
  • Save mekefly/6e991b54e52ba62cc1b5bed795e67bfe to your computer and use it in GitHub Desktop.
Save mekefly/6e991b54e52ba62cc1b5bed795e67bfe to your computer and use it in GitHub Desktop.
打家劫舍难度中等.md

打家劫舍

[[算法]]

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。

给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。

198. 打家劫舍 - 力扣(LeetCode)

[[动态规划]]

时间复杂度:On 空间复杂度:On

Pasted image 20210718141836

class Solution {
    public int rob(int[] nums) {
        //不符合运算条件
        int numsL = nums.length;
        if(numsL<3){
            if(numsL == 1){
                return nums[0];
            }else {
                if(nums[0]>nums[1]){
                    return nums[0];
                }else{
                    return nums[1];
                }
            }
        }

        //动态规划
        int[]  dp = new int[numsL];
        //初始化
        dp[0] = nums[0];
        if(nums[0]>nums[1]){
            dp[1] = nums[0];
        }else{
            dp[1] = nums[1];
        }

        //状态转移表格
        for(int i = 2;i<numsL;i++){
            //状态转移方程
            int item = dp[i-2]+nums[i];
            if(item>dp[i-1]){
                dp[i]=item;
            }else{
                dp[i] = dp[i-1];
            }
        }

     return dp[numsL-1]; 
    }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment