思路:依据数组特点时间复杂度为O(n)
数组中有一个数字出现的次数超过一般,也就是说它出现的次数比其他所有数字出现次数的和还要多。因此,可以考虑在遍历数组的时候保存两个值:一个是数组中的一个数字,另一个是次数。当遍历到下一个数字的时候,如果下一个数字和之前保存的数字是相等的,次数+1;不相等,次数-1;如果次数为0,将保存的数字更新为当前数字,并把次数重置为1。由于要找的数字出现的次数比其他的数字出现的次数之和都多,那么要找的数字就是最后保存的数字(也就是最后一次将次数设置为1所对应的数字)。
class Solution:
def majorityElement(self, nums: List[int]) -> int:
# nums.sort() 不需要排序,如果要查找数字出现的次数最多的需要排序(次数不需要超过一半)
result = nums[0]
times=1
length = len(nums)
for i in range(1,length):
if times == 0:
result = nums[i]
times = 1
elif nums[i] == result:
times += 1
else:
times -= 1
return result