您现在的位置是:首页 > 文章详情

java之 ------------[LeetCode] House Robber 打家劫舍||

日期:2018-07-30点击:560

做完打家劫舍后我发现自己动态规划方面处理问题的能力,终于迎来了开篇,虽然打家劫舍是在我看网上的别的人做的,然后自己理解的,但是我知道我再遇到这类题不会再手足无措了,隔了两天再来挑战,我看看自己的动态规划能力是否有那么一点点,于是做了打家劫舍||,虽然我做了将近2个小时,但是庆幸的是自己依靠自己的能力做了出来,很感动,自己花了一晚上的时间做出来了,我都被自己感动的哭了,我算法如此垃圾,竟然能完全依靠自己的能力做出这个算法,真的很让我相信:天才是少数的,大多数人喜欢给自己的懒,找借口。好了不说,

说思路吧:

1.不让它收尾都取,只让它取其一,首端取了,尾端就不取,尾端取了首端就不取,然后在打家劫舍的基础上多声明一个数组,这个数组的取值是从原数组的尾端开始取值的,其实算法和打家劫舍一样,只不过我把打家劫舍的算法用了两遍,

2.上代码吧

 public int rob(int[] nums) {
          if (nums.length == 0) {
            return 0;
        }
        if (nums.length == 1) {
            return nums[0];
        }
        int max = Math.max(nums[0],nums[1]);
        if (nums.length == 2) {
            return max;
        }
        int[] f = new int[nums.length];
        int[] n = new int[nums.length];
        f[0] = nums[0];
        f[1] = max;
        n[nums.length-1] = nums[nums.length-1];
        n[nums.length-2] = Math.max(nums[nums.length-1],nums[nums.length-2]);
        for (int i = 2; i <nums.length-1 ; i++) {
            f[i] = Math.max(f[i - 2] + nums[i], f[i - 1]);
        }
        for (int i = nums.length-3; i > 0; i--) {
            n[i] = Math.max(n[i+2] + nums[i], n[i+1]);
        }
        if (f[nums.length-2] >= n[1]){
            return f[nums.length-2];
        }
        return n[1];
    }

原文链接:https://yq.aliyun.com/articles/625778
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章