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;
        }
    }
  • 相关阅读:
    二叉树
    消息
    线性表 及Java实现 顺序表、链表、栈、队列
    Memcache简介
    redis例子
    redis简介
    Android客户端采用Http 协议Post方式请求与服务端进行数据交互(转)
    jQueryValidate实现重复性验证
    mybatis中${}和#{}的区别
    List转换为数组Array的方法
  • 原文地址:https://www.cnblogs.com/HuangYJ/p/14217108.html
Copyright © 2011-2022 走看看