LeetCode Solutions
740. Delete and Earn
Time: $O(n)$ Space: $O(10001) = O(1)$
class Solution {
public:
int deleteAndEarn(vector<int>& nums) {
// Reduce to 198. House Robber
vector<int> bucket(10001);
for (const int num : nums)
bucket[num] += num;
int prev1 = 0;
int prev2 = 0;
for (const int num : bucket) {
const int dp = max(prev1, prev2 + num);
prev2 = prev1;
prev1 = dp;
}
return prev1;
}
};
class Solution {
public int deleteAndEarn(int[] nums) {
// Reduce to 198. House Robber
int[] bucket = new int[10001];
for (final int num : nums)
bucket[num] += num;
int prev1 = 0;
int prev2 = 0;
for (final int num : bucket) {
final int dp = Math.max(prev1, prev2 + num);
prev2 = prev1;
prev1 = dp;
}
return prev1;
}
}