12345678910111213141516171819202122232425 |
- func rob(nums []int) int {
- n := len(nums)
- if n == 0 {
- return 0
- } else if n == 1 {
- return nums[0]
- }
- dp := make([][]int, 2) // dp[0][i]: pick first element; dp[1][i]: do not pick.
- for i := range dp {
- dp[i] = make([]int, n)
- }
- dp[0][1] = nums[0]
- for i := 2; i < n; i++ {
- dp[0][i] = maxInt(dp[0][i-1], nums[i-1]+dp[0][i-2])
- dp[1][i] = maxInt(dp[1][i-1], nums[i-1]+dp[1][i-2])
- }
- return maxInt(dp[0][n-1], maxInt(dp[1][n-2]+nums[n-1], dp[1][n-1]))
- }
- func maxInt(x, y int) int {
- if x < y {
- return y
- }
- return x
- }
|