zoukankan      html  css  js  c++  java
  • LeetCode-House Robber II

    Note: This is an extension of House Robber.

    After robbing those houses on that street, the thief has found himself a new place for his thievery so that he will not get too much attention. This time, all houses at this place are arranged in a circle. That means the first house is the neighbor of the last one. Meanwhile, the security system for these houses remain the same as for those in the previous street.

    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:

    First method: consider two cases (a) rob first house, (b) not rob first house. For each case, we calculate two arrays robThis[i] and notRobThis[i], i.e., the max profit we can get with/without robbing ith house, and we always have

    robThis[i] = notRobThis[i-1]+nums[i];

    notRobThis[i] = max(robThis[i-1], notRobThis[i-1]);

    At last, we just compare (a) rob first house case's notRobThis[n], (b) not rob first house case's robThis[n]. As we are not allowed to rob both of 1st and last houses.

    Solution:

     1 public class Solution {
     2     public int rob(int[] nums) {
     3         if (nums.length==0) return 0;
     4         if (nums.length==1) return nums[0];
     5 
     6         int rFirstAThis = nums[0];
     7         int rFirstNoThis = 0;
     8         int nrFirstRThis = 0;
     9         int nrFirstNoThis = 0;
    10 
    11         for (int i=1;i<nums.length;i++){
    12             int pre = rFirstAThis;
    13             rFirstAThis = rFirstNoThis + nums[i];
    14             rFirstNoThis = Math.max(pre,rFirstNoThis);
    15 
    16             pre = nrFirstRThis;
    17             nrFirstRThis = nrFirstNoThis + nums[i];
    18             nrFirstNoThis = Math.max(pre,nrFirstNoThis);
    19         }
    20 
    21         return Math.max(rFirstNoThis,nrFirstRThis);
    22     }
    23 }

    Solution 2:

    We can just exclude 1st house / last house and do house robber I twice, and compare the results.

    Actually the same idea, but different implementation.

  • 相关阅读:
    前端一站式学习地址
    springboot注解开发
    java中的四种内部类使用(1)
    java内存回收机制
    TweenMax详解
    flash渲染机制
    通过字符串名访问变量
    总结调用Flash的几种方法
    flex buider2 的注册
    转:FlexChn.Cn Adobe Flex最佳学习路线
  • 原文地址:https://www.cnblogs.com/lishiblog/p/5728820.html
Copyright © 2011-2022 走看看