Bucket + House Robber
Time O(n + max) Space O(max)Sum values into points[v]; run take/skip over v = 0..max.
class Solution {
public int deleteAndEarn(int[] nums) {
int max = 0;
for (int x : nums) max = Math.max(max, x);
int[] points = new int[max + 1];
for (int x : nums) points[x] += x;
int prev2 = 0, prev1 = 0;
for (int v = 0; v <= max; v++) {
int cur = Math.max(prev1, prev2 + points[v]);
prev2 = prev1;
prev1 = cur;
}
return prev1;
}
}Verdict: A disguise of House Robber.