zoukankan      html  css  js  c++  java
  • LeetCode213. 打家劫舍 II

    思路:与198题的区别是,本题的房子时环形的,即首位连接。

      首先,首尾房间不能同时被抢,那么只可能有三种不同情况:要么都不被抢;要么第一间房子被抢最后一间不抢;要么最后一间房子被抢第一间不抢。

      但是,只需要考虑情况二和情况三,取两种情况最大的即可。

      因为,在计算这两种情况时,已经把都不抢的情况考虑到了。

    因此,把原始数组分成 去头  和 去尾 两个队列的数据。

    class Solution {
        public int rob(int[] nums) {
            int n = nums.length;
            if (n == 0) return 0;
            if (n == 1) return nums[0];
    //        return Math.max(myRob(Arrays.copyOfRange(nums,0,n-1)),
    //                        myRob(Arrays.copyOfRange(nums,1,n)));
            return Math.max(myRob1(nums, 0, n-2),
                            myRob1(nums,1,n-1));
        }
        private int myRob(int[] nums) {
            int a = 0, b = 0;
            for (int i = 0; i < nums.length; i++) {
                int temp = Math.max(nums[i] + a, b);
                a = b;
                b = temp;
            }
            return b;
        }
        private int myRob1(int[] nums, int start, int end) {
            int a = 0, b = 0;
            for (int i = start; i <= end; i++) {
                int temp = Math.max(nums[i] + a, b);
                a = b;
                b = temp;
            }
            return b;
        }
    }
  • 相关阅读:
    (转)使用InfluxDB+cAdvisor+Grafana配置Docker监控
    Linux cut命令
    php 三种数组
    Linux httpd源码编译安装
    Linux yum如何下载rpm包到本地
    linux yum 工具
    windows phpstudy 本地添加自定义域名
    php.ini
    Linux rpm 查询
    linux rpm 安装和卸载
  • 原文地址:https://www.cnblogs.com/HuangYJ/p/14217108.html
Copyright © 2011-2022 走看看