打家劫舍

根据规律写出伪代码:

S1 = H1
S2 = max(S1, H2)
S3 = max(S2, S1 + H3)
S4 = max(S3, S2 + H4)

动态规划

function rob(nums: number[]): number {
  // 初始化状态
  let p = nums[0]
  let q = Math.max(nums[0], nums[1])
  for (let i = 2; i < nums.length; i++) {
    // 状态转移
    const max = Math.max(q, p + nums[i])
    p = q
    q = max
  }

  return q || p
}