classSolution:defsearchInsert(self, nums: List[int], target:int)->int:ifnot nums:returnNone
left =0
right =len(nums)-1if nums[left]== target:return left
if nums[right]== target:return right
if nums[left]> target:return0if nums[right]<target:returnlen(nums)while left < right-1:
mid =(left + right)//2if nums[mid]== target:return mid
if nums[mid]< target:
left = mid
else:
right = mid
if nums[left]== target:return left
else:return right
快乐数
classSolution:defisHappy(self, n:int)->bool:
past = n
collect =[n]whileTrue:
nums =list(str(past))
sums =0for i in nums:
sums +=int(i)**2if sums ==1:returnTrueif sums in collect:returnFalse
past = sums
collect.append(sums)
同构字符串
classSolution:defisAnagram(self, s:str, t:str)->bool:iflen(s)!=len(t):returnFalsedefcreate_dic(s):
dic=dict()for a in s:if a in dic.keys():
dic[a]= dic[a]+1else:
dic[a]=0return dic
dic1 = create_dic(s)
dic2 = create_dic(t)return dic1 == dic2
有效的字母异位词
classSolution:defisAnagram(self, s:str, t:str)->bool:iflen(s)!=len(t):returnFalsedefcreate_dic(s):
dic=dict()for a in s:if a in dic.keys():
dic[a]= dic[a]+1else:
dic[a]=0return dic
dic1 = create_dic(s)
dic2 = create_dic(t)return dic1 == dic2
单词规律
classSolution:defwordPattern(self, pattern:str,str:str)->bool:
pattern =list(pattern)str=str.split()iflen(pattern)!=len(str):returnFalse
dic =dict()
words =[]for p,s inzip(pattern,str):if p notin dic.keys():if s in words:returnFalse
dic[p]= s
words.append(s)elif dic[p]!= s:returnFalsereturnTrue
classSolution:defintersect(self, nums1: List[int], nums2: List[int])-> List[int]:
dic ={num:[0,0]for num in nums1+nums2}for i in nums1:
dic[i][0]+=1for i in nums2:
dic[i][1]+=1
res =[]for i in dic:
res +=[i]*min([dic[i][0],dic[i][1]])return res
分割数组的最大值
classSolution:defsplitArray(self, nums: List[int], m:int)->int:
n =len(nums)
f =[[10**18]*(m +1)for _ inrange(n +1)]
sub =[0]for elem in nums:
sub.append(sub[-1]+ elem)
f[0][0]=0for i inrange(1, n +1):for j inrange(1,min(i, m)+1):for k inrange(i):
f[i][j]=min(f[i][j],max(f[k][j -1], sub[i]- sub[k]))return f[n][m]
根据字符出现频率排序
classSolution:deffrequencySort(self, s:str)->str:ifnot s:return''
dic =dict()for i in s:if i notin dic.keys():
dic[i]=1else:
dic[i]+=1
dic =[(k,dic[k])for k in dic]
dic.sort(key=lambda x:x[1],reverse=True)
res =''for i in dic:
res += i[0]*i[1]return res
有序数组中的单一元素
classSolution:defsingleNonDuplicate(self, nums: List[int])->int:iflen(nums)==1:return nums[0]
left =0
right =len(nums)-2while left < right -1:if nums[left]!= nums[left+1]:return nums[left]if nums[right]!= nums[right+1]:return nums[right+1]
mid =(left + right)//2if nums[mid]!= nums[mid+1]:if nums[mid+1]==nums[mid+2]:
mid +=1else:return nums[mid+1]if(right - mid)%2==0:
right = mid
else:
left = mid
# print(left,right)if nums[left]!=nums[left+1]:return nums[left]else:return nums[right+1]