题解 | #打家劫舍(一)#

打家劫舍(一)

http://www.nowcoder.com/practice/c5fbf7325fbd4c0ea3d0c3ea6bc6cc79

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型一维数组 
     * @return int整型
     */
    //动态规划的解法
    //定义一个同样大小的dp数组,其含义位dp[i]的含义为从第0家偷到第i家时能偷到的最大财产为dp[i]这么大
    //假设当前来到某一家时,小偷可以选择偷这一家也可以选择不偷,如果选择偷,那么dp[i]=dp[i-2]+arr[i],
    //如果不偷这一家那么dp[i]=dp[i-1].
    //dp数组的初始化为d[0]=arr[0],dp[1]=max{arr[0],arr[1]};
    public int rob (int[] nums) {
        // write code here
        if(nums.length<=0)
            return 0;
        //考虑到nums数组的特殊情况,如果nums数组只有一个值,那直接返回这个值即可
        if(nums.length==1)
            return nums[0];
        int []dp=new int[nums.length];//申请一个dp数组
        dp[0]=nums[0];
        dp[1]=Math.max(nums[0],nums[1]);//初始化完成
        for(int i=2;i<dp.length;i++){
            //当前来到第i家有两种选择,偷或者不偷,取这两个决策下的最大收益
            dp[i]=Math.max(nums[i]+dp[i-2],dp[i-1]);
        }
        return dp[dp.length-1];//返回最大值
    }
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-02 14:45
bg是二本双一流硕,目标是Java后端开发岗,投暑期实习0大厂面试,只有极少的大厂测开,可能投的晚加上简历太烂加上0实习?求大佬们给个建议
程序员小白条:别去小厂,初创或者外包,尽量去中小,100-499和500-999,专门做互联网产品的,有公司自研的平台和封装的工具等等,去学习一些业务相关的,比如抽奖,积分兑换,SSO认证,风控,零售等等,目标 Java 后端开发吗?你要不考虑直接走大厂测开?如果技术不行的话,有面试你也很难过的
实习,不懂就问
点赞 评论 收藏
分享
星辰再现:裁员给校招生腾地方
点赞 评论 收藏
分享
05-30 12:03
山西大学 C++
offer来了我跪着...:不是骗子,等到测评那一步就知道为啥这么高工资了
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务