Cindy's Blog

アマゾンで働いているエンジニアの日常

LeetCode 213. House Robber II

Very interesting question 0 ~ n - 2 また 1 ~ n -1 に2つに分けることを思いつかなかったな。

class Solution {
    public int rob(int[] nums) {
        
        int n = nums.length;
        if (n <= 3){
            int max = 0;
            for (int i = 0; i < n; i++){
                max = Math.max(nums[i], max);
            }
            return max;
        }
        
        return Math.max(findMaxSum(nums, 0, n - 1), findMaxSum(nums, 1, n));
       
    }
    
    private int findMaxSum(int[] nums, int start, int end){
        int prev = 0;
        int beforePrev = 0;
        
        for (int i = start; i < end; i++){
            //prev -> beforePrev
            //prev -> new max
            int temp = prev;
            //rob or not
            prev = Math.max(beforePrev + nums[i], prev);
            beforePrev = temp;
        }
        
        return prev;
    }
}