LeetCode-198. House Robber

Problem:

You are a professional robber planning to rob houses along a street.
Each house has a certain amount of money stashed, the only constraint
stopping you from robbing each of them is that adjacent houses have
security system connected and it will automatically contact the police
if two adjacent houses were broken into on the same night.

Given a list of non-negative integers representing the amount of money
of each house, determine the maximum amount of money you can rob
tonight without alerting the police.

Analysis:
这个问题是典型的简单的DP(动态规划)问题,主要思想是找到逻辑关系,通过上述题意可以得到递推关系:maxv=Math.max(maxv[i-2]+nums[i],maxv[i-1]),这个递推关系的意思是:这个房间可以得到的最大抢劫数额为(这个房间不相邻的上一个房间最大抢劫数额+本房间的数额)与(上一个相邻的房间的最大抢劫数额)的最大值。
Anwser:

public class Solution {
    public int rob(int[] nums) {
        if (nums.length==0) return 0;
        int[] maxv=new int[nums.length];
        for(int i=0;i<nums.length;i++){
            if(i==0) maxv[i]=nums[i];
            else if(i==1) maxv[i]=Math.max(nums[0],nums[1]);
            else maxv[i]=Math.max(maxv[i-2]+nums[i],maxv[i-1]);
        }
        return maxv[nums.length-1];
    }
}

本题经验总结:

  1. Java数组定义方法:int[] maxv=new int[nums.length];
  2. 要考虑给定数组为空和数组只有一个值得情况。所以要有if (nums.length==0) return 0;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值