打家劫舍(java)

问题描述:
打家劫舍(java)_第1张图片
思路分析:

动态规划方程:dp[n] = MAX( dp[n-1], dp[n-2] + num );
由于不可以在相邻的房屋闯入,所以在当前位置 n 房屋可盗窃的最大值,要么就是 n-1 房屋可盗窃的最大值,要么就是 n-2,房屋可盗窃的最大值加上当前房屋的值,二者之间取最大值。(为了节约空间效率,也可以使用一维滚动数组,只记录三个值即可)

具体见代码如下:

package Leetcode;

import java.util.Scanner;

public class Djjs {
    //打家劫舍
    public static int rob(int[] nums) {
        int len = nums.length;//记录数组长度
        if(len == 0)//若没有数据,直接返回0
            return 0;
        int[] dp = new int[len + 1];//建立dp数组
        dp[0] = 0;//初始化
        dp[1] = nums[0];
        for(int i = 2; i <= len; i++) {
            dp[i] = Math.max(dp[i-1], dp[i-2] + nums[i-1]);//填入数据
        }
        return dp[len];//结果返回
    }

    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);//数据输入
        int len=scanner.nextInt();//输入数组长度
        int []nums=new int[len];
        for (int i = 0; i 

运行结果:
打家劫舍(java)_第2张图片

你可能感兴趣的:(leetcode,数据结构,动态规划,算法,java)