code.ashish.me

Atom feed

Recently added: 128 Longest Consecutive Sequence, 347 Top K Frequent Elements, 045 Jump Game 2, 228 Summary Ranges, 219 Contains Duplicate 2

198 House Robber

/**
 * 
 * Ashish Patel
 * e: ashishsushilPatel@gmail.com
 * w: https://ashish.me
 *
 */

/* 
* You are a professional robber planning to rob houses along a street. 
* Each house has a certain amount of money stashed, the only constraint 
* stopping you from robbing each of them is that adjacent houses have 
* security system connected and it will automatically contact the police 
* if two adjacent houses were broken into on the same night.
* 
* 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.
* 
* Example 1:
* 
* Input: [1,2,3,1]
* Output: 4
* Explanation: Rob house 1 (money = 1) and then rob house 3 (money = 3).
*              Total amount you can rob = 1 + 3 = 4.
* Example 2:
* 
* Input: [2,7,9,3,1]
* Output: 12
* Explanation: Rob house 1 (money = 2), rob house 3 (money = 9) and rob house 5 (money = 1).
*              Total amount you can rob = 2 + 9 + 1 = 12.
*/

function houseRobber(nums) {
  if(nums.length === 0) return 0
  if(nums.length === 1) return nums[0]
  if(nums.length === 2) return Math.max(nums[0], nums[1])

  let result = [nums[0], Math.max(nums[0], nums[1])]
  for (let index = 2; index < nums.length; index++) {
    result.push(Math.max(nums[index] + result[index - 2], result[index-1]))
  }
  return result.pop()
}

test('house Robber', () => {
  expect(houseRobber([2,7,9,3,1])).toEqual(12)
  expect(houseRobber([1,2,3,1])).toEqual(4)
});

Created 2020-03-25T19:55:29+00:00 · Edit