Take or Skip problem
740. Delete and Earn
class Solution(object):
def deleteAndEarn(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
dp=[0 for i in range(10001)]
for num in nums:
dp[num]+=num
skip=0
take=0
for i in range(1,10001):
takei=skip+dp[i] # last must skip
skipi=max(skip,take) #last can be skip or take
take=takei
skip=skipi
return max(take,skip)
213. House Robber II
class Solution(object):
def rob(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
dp=[0 for i in range(len(nums)-1)]
def helper(nums,dp):
if not nums:
return 0
print nums
if len(nums)==1:
return nums[0]
dp[0]=nums[0]
dp[1]=max(nums[0],nums[1])
for i in range(len(nums)-2):
dp[i+2]=max(dp[i]+nums[i+2],dp[i+1])
return dp[-1]
if not nums:
return 0
if len(nums)==1:
return nums[0]
return max(helper(nums[1:],dp),helper(nums[:-1],dp))