classSolution:defmajorityElement(self, nums: List[int])->int:n =len(nums)value_counts = defaultdict(int)for i in nums:value_counts[i]+=1for i in value_counts:if value_counts[i]>= n/2:return i
三、75. 颜色分类
思路: 两次遍历,第一次将所有的0归为,第二次将所有的1归为
代码:
classSolution:defsortColors(self, nums: List[int])->None:"""Do not return anything, modify nums in-place instead."""defswap(i, j):nums[i], nums[j]= nums[j], nums[i]n =len(nums)ptr =0for i inrange(n):if nums[i]==0:swap(i, ptr)ptr +=1for i inrange(n):if nums[i]==1:swap(i, ptr)ptr +=1
四、31. 下一个排列
代码:
classSolution:defnextPermutation(self, nums: List[int])->None:"""Do not return anything, modify nums in-place instead."""n =len(nums)i = n-2while i >=0and nums[i]>= nums[i+1]:i -=1if i >=0:j = n-1while nums[j]<= nums[i]:j -=1nums[i], nums[j]= nums[j], nums[i]left, right = i+1, n-1while left<right:nums[left], nums[right]= nums[right], nums[left]left +=1right -=1
五、287. 寻找重复数
classSolution:deffindDuplicate(self, nums: List[int])->int:n, i =len(nums),0while i < n:t, idx = nums[i], nums[i]-1# t 是当前值,idx 是当前值该放到的位置if nums[idx]== t:# 如果当前值已经在它该在的位置上if idx != i:# 表示当前值 t 和它“应该在的位置”的值相等,说明有重复,立即返回return ti +=1else:nums[i], nums[idx]= nums[idx], nums[i]return-1