Thursday, January 21, 2021

LeetCode [740] Delete and Earn

 740. Delete and Earn

Medium

Given an array nums of integers, you can perform operations on the array.

In each operation, you pick any nums[i] and delete it to earn nums[i] points. After, you must delete every element equal to nums[i] - 1 or nums[i] + 1.

You start with 0 points. Return the maximum number of points you can earn by applying such operations.

Example 1:

Input: nums = [3, 4, 2]
Output: 6
Explanation: 
Delete 4 to earn 4 points, consequently 3 is also deleted.
Then, delete 2 to earn 2 points. 6 total points are earned.

 

Example 2:

Input: nums = [2, 2, 3, 3, 3, 4]
Output: 9
Explanation: 
Delete 3 to earn 3 points, deleting both 2's and the 4.
Then, delete 3 again to earn 3 points, and 3 again to earn 3 points.
9 total points are earned.

 

Note:

  • The length of nums is at most 20000.
  • Each element nums[i] is an integer in the range [1, 10000].

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
    /*
    p2 p1 p0
       p2 p1
    */
    public int deleteAndEarn(int[] nums) {
        int n = 10001;
        int[] sum = new int[n];
        int max = 0;
        for(int i : nums) sum[i] += i;
        
        int p1 = 0, p2 = 0;
        for(int i=0; i<n; ++i){
            //max earned point until current position
            int p0 = Math.max(sum[i]+p2, p1);
            p2 = Math.max(p1, p2);
            p1 = p0;
            max = Math.max(max, p0);
        }
        
        return max;
    }
}

No comments:

Post a Comment