House Robber

D
H
/**
 * @function houseRobber
 * @description Given an integer array nums representing the amount of money of each house, return the maximum amount of money you can rob tonight without alerting the police.
 * @param {number[]} nums
 * @return {number}
 * @see [Leetcode link](https://leetcode.com/problems/house-robber/)
 */
export const houseRobber = (nums) => {
  const length = nums.length

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

  const dp = Array(length) // last element of this array always contains biggest loot possible
  dp[0] = nums[0]
  dp[1] = Math.max(nums[0], nums[1])

  for (let i = 2; i < length; i++) {
    dp[i] = Math.max(nums[i] + dp[i - 2], dp[i - 1])
  }
  return dp[length - 1]
}