LeetCode-198. House Robber

来源:互联网 发布:淘宝金酷娃玩具石油车 编辑:程序博客网 时间:2024/04/28 10:20

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
原创粉丝点击