classSolution:deffourSumCount(self, A: List[int], B: List[int], C: List[int], D: List[int])->int:from collections import Counter
record=Counter()for i inrange(len(A)):for j inrange(len(B)):
record[A[i]+B[j]]+=1
res=0for i inrange(len(C)):for j inrange(len(D)):
find_num=0-C[i]-D[i]if record.get(find_num)!=None:
res+=record[find_num]return res
leetcode 49:字母异位词分组
classSolution:defgroupAnagrams(self, strs: List[str])-> List[List[str]]:from collections import defaultdict
strs_dict=defaultdict(list)forstrin strs:
key=''.join(sorted(list(str)))
strs_dict[key]+=str.split(',')return[v for v in strs_dict.values()]
leetcode 447:回旋镖的数量
classSolution:defnumberOfBoomerangs(self, points: List[List[int]])->int:from collections import Counter
deff(x1,y1):
d=Counter((x2-x1)**2+(y2-y1)**2for x2,y2 in points)returnsum(t*(t-1)for t in d.values())returnsum(f(x1,y1)for x1,y1 in points)
leetcode 149:直线上最多的点数
classSolution:defmaxPoints(self, points: List[List[int]])->int:iflen(points)<=1:returnlen(points)
res=0from collections import defaultdict
for i inrange(len(points)):
record=defaultdict(int)
samepoint=0for j inrange(len(points)):if points[i][0]==points[j][0]and points[i][1]==points[j][1]:
samepoint+=1else:
record[self.get_Slope(points,i,j)]+=1for v in record.values():
res=max(res,samepoint)
res=max(res,samepoint)return res
defget_Slope(self,points,i,j):if points[i][1]-points[j][1]==0:returnfloat('Inf')else:return(points[i][0]-points[j][0])/(points[i][1]-points[j][1])
leetcode 219:存在重复元素II
classSolution:defcontainsNearbyDuplicate(self, nums: List[int], k:int)->bool:dict={}for i inrange(len(nums)):if nums[i]indictand i -dict[nums[i]]<= k:returnTruedict[nums[i]]= i
returnFalse
leetcode 220:存在重复元素III
classSolution:defcontainsNearbyAlmostDuplicate(self, nums: List[int], k:int, t:int)->bool:for i inrange(len(nums)):for j inrange(i +1,len(nums)):ifabs(nums[i]- nums[j])<= t and j - i <= k:returnTruereturnFalse