classSolution: defmajorityElement(self, nums: List[int]) -> int: iflen(nums) < 2: return nums[0] n = len(nums) // 2 hash_map = {} for i in nums: if i in hash_map: hash_map[i] += 1 if hash_map[i] > n: return i else: hash_map[i] = 1
middle = _len >> 1# 等效于 _len // 2 start = 0 end = _len - 1 index = self.partition(nums, _len, start, end) while index != middle: if index > middle: end = index - 1 index = self.partition(nums, _len, start, end) else: start = index + 1 index = self.partition(nums, _len, start, end)
# result = nums[middle] # while循环结束的条件就是 index == middle result = nums[index] # 所以这里写 result = nums[middle] 或者 result = nums[index]都可以
ifnot self.checkResult(nums, _len, result): result = 0 return result
# 划分函数,只进行一次二分查找,不递归。 defpartition(self, nums, _len, start, end): if nums == Noneor _len < 1or start < 0or end >= _len: returnNone if end == start: return end pivotvlue = nums[start] leftmark = start + 1 rightmark = end
classSolution: defmajorityElement(self, nums: List[int]) -> int: _len = len(nums) ifnot self.checkValid(nums, _len): return0# 输入不合法就返回0 result = nums[0] times = 1 for i inrange(1, _len): if times == 0: result = nums[i] times = 1 elif nums[i] == result: times += 1 else: times -= 1
ifnot self.checkResult(nums, _len, result): result = 0 return result