Skip to content

Commit a7fe8f6

Browse files
Create delete_and_earn.py
1 parent c37fecb commit a7fe8f6

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed

Diff for: delete_and_earn.py

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
class Solution:
2+
def deleteAndEarn(self, nums: List[int]) -> int:
3+
def solve(nums: List[int], index: int) -> int:
4+
nonlocal memoize
5+
6+
#base case
7+
n = len(nums)
8+
if index >= n:
9+
return 0
10+
11+
#check for memoization
12+
if memoize[index] != -1:
13+
return memoize[index]
14+
15+
#induction
16+
17+
currValue = currSum = nums[index]
18+
nextIndex = index + 1
19+
20+
while nextIndex < n and currValue == nums[nextIndex]:
21+
currSum += nums[nextIndex] #prefix sum for same values
22+
nextIndex += 1
23+
24+
while nextIndex < n and currValue + 1 == nums[nextIndex]: #skip
25+
nextIndex += 1
26+
27+
28+
memoize[index] = max(currSum + solve(nums, nextIndex), solve(nums, index + 1)) #pick, unpick
29+
30+
return memoize[index]
31+
32+
nums.sort()
33+
memoize = [-1 for _ in range(200001)] # constraints
34+
return solve(nums, 0)
35+

0 commit comments

Comments
 (0)