int rob(vector<int>& nums) {
function<int(int)> best = [&](int i) -> int {
if (i >= (int)nums.size()) return 0;
return max(nums[i] + best(i + 2), best(i + 1));
};
return best(0);
}
public int rob(int[] nums) {
return best(nums, 0);
}
private int best(int[] nums, int i) {
if (i >= nums.length) return 0;
return Math.max(nums[i] + best(nums, i + 2), best(nums, i + 1));
}
def rob(nums):
def best(i):
if i >= len(nums): return 0
return max(nums[i] + best(i + 2), best(i + 1))
return best(0)
function rob(nums: number[]): number {
const best = (i: number): number => {
if (i >= nums.length) return 0;
return Math.max(nums[i] + best(i + 2), best(i + 1));
};
return best(0);
}
int rob(vector<int>& nums) {
vector<int> memo(nums.size(), -1);
function<int(int)> best = [&](int i) -> int {
if (i >= (int)nums.size()) return 0;
if (memo[i] != -1) return memo[i];
memo[i] = max(nums[i] + best(i + 2), best(i + 1));
return memo[i];
};
return best(0);
}
public int rob(int[] nums) {
int[] memo = new int[nums.length];
Arrays.fill(memo, -1);
return best(nums, memo, 0);
}
private int best(int[] nums, int[] memo, int i) {
if (i >= nums.length) return 0;
if (memo[i] != -1) return memo[i];
memo[i] = Math.max(nums[i] + best(nums, memo, i + 2), best(nums, memo, i + 1));
return memo[i];
}
def rob(nums):
memo = [-1] * len(nums)
def best(i):
if i >= len(nums): return 0
if memo[i] != -1: return memo[i]
memo[i] = max(nums[i] + best(i + 2), best(i + 1))
return memo[i]
return best(0)
function rob(nums: number[]): number {
const memo = new Array<number>(nums.length).fill(-1);
const best = (i: number): number => {
if (i >= nums.length) return 0;
if (memo[i] !== -1) return memo[i];
memo[i] = Math.max(nums[i] + best(i + 2), best(i + 1));
return memo[i];
};
return best(0);
}
int rob(vector<int>& nums) {
int n = nums.size();
vector<int> dp(n + 2, 0);
for (int i = n - 1; i >= 0; i--) {
dp[i] = max(nums[i] + dp[i + 2], dp[i + 1]);
}
return dp[0];
}
public int rob(int[] nums) {
int n = nums.length;
int[] dp = new int[n + 2];
for (int i = n - 1; i >= 0; i--) {
dp[i] = Math.max(nums[i] + dp[i + 2], dp[i + 1]);
}
return dp[0];
}
def rob(nums):
n = len(nums)
dp = [0] * (n + 2)
for i in range(n - 1, -1, -1):
dp[i] = max(nums[i] + dp[i + 2], dp[i + 1])
return dp[0]
function rob(nums: number[]): number {
const n = nums.length;
const dp = new Array<number>(n + 2).fill(0);
for (let i = n - 1; i >= 0; i--) {
dp[i] = Math.max(nums[i] + dp[i + 2], dp[i + 1]);
}
return dp[0];
}
int rob(vector<int>& nums) {
int next1 = 0, next2 = 0;
for (int i = (int)nums.size() - 1; i >= 0; i--) {
int cur = max(nums[i] + next2, next1);
next2 = next1;
next1 = cur;
}
return next1;
}
public int rob(int[] nums) {
int next1 = 0, next2 = 0;
for (int i = nums.length - 1; i >= 0; i--) {
int cur = Math.max(nums[i] + next2, next1);
next2 = next1;
next1 = cur;
}
return next1;
}
def rob(nums):
next1 = next2 = 0
for i in range(len(nums) - 1, -1, -1):
cur = max(nums[i] + next2, next1)
next2 = next1
next1 = cur
return next1
function rob(nums: number[]): number {
let next1 = 0, next2 = 0;
for (let i = nums.length - 1; i >= 0; i--) {
const cur = Math.max(nums[i] + next2, next1);
next2 = next1;
next1 = cur;
}
return next1;
}