337-打家劫舍3(python)
#完全背包0/1
class Solution:
def rob(self,root):
def robinterger(root):
res=[0,0]
if not root:return res
left=robinterger(root.left)
right=robinterger(root.right)
res[0]+=max(left[0],left[1])+max(right[0],right[1])
res[1]+=root.val+left[0]+right[0]
robinterger(root)
return res
338-比特位计数(python)
#动态规划
class Solution:
def countBits(self, num: int) -> List[int]:
dp=[0]*(num+1)
for i in range(1,num+1):
if(i%2==1):
dp[i]=dp[i-1]+1
else:
dp[i]=dp[i//2]
return dp
347-前k个高频元素(python)
#dict
class Solution:
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
dict={
}
for num in nums:
dict[num]=dict.get(num,0)+1
dict=sorted(dict,key=dict.__getitem__,reverse=True)
return dict[0:k]
581-最短无序连续子数组(python)
#找左右区间
class Solution:
def findUnsortedArray(self,nums):
n=len(nums)
max_num=nums[0]
right=0
for i in range(n):
if nums[i]>=max_num:
max_num=nums[i]
else:
right=i
min_num=nums[n-1]
left=n-1
for j in range(n-1,-1,-1):
if nums[i]<=min_num:
min_num=nums[i]
else:
left=j
return right-left+1 if (right-left+1)>0 else 0
560-和为k的子数组(python)
#hash
class Solution:
def subarraySum(self, nums: List[int