题目:
给定一个大小为 n 的数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。 说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1)。
思路:
思路1:使用函数;思路2:使用投票法
程序1:使用函数
class Solution:
def majorityElement(self, nums: List[int]) -> List[int]:
length = len(nums)
if length <= 0:
return []
if length == 1:
return [nums[0]]
result = []
key = length / 3
for num in set(nums):
if nums.count(num) > key:
result.append(num)
return result
程序2:投票法
class Solution:
def majorityElement(self, nums: List[int]) -> List[int]:
length = len(nums)
if length <= 0:
return []
if length == 1:
return [nums[0]]
result = []
key = length // 3
counter1 = 0
counter2 = 0
candidate1 = 0
candidate2 = 0
for num in nums:
if candidate1 == num:
counter1 += 1
elif candidate2 == num:
counter2 += 1
elif counter1 == 0:
candidate1 = num
counter1 = 1
elif counter2 == 0:
candidate2 = num
counter2 = 1
else:
counter1 -= 1
counter2 -= 1
counter1 = 0
counter2 = 0
for num_1 in nums:
if candidate1 == num_1:
counter1 += 1
if candidate2 == num_1:
counter2 += 1
if counter1 > key and candidate1 != candidate2:
result.append(candidate1)
if counter2 > key and candidate1 != candidate2:
result.append(candidate2)
if counter1 > key and candidate1 == candidate2:
result.append(candidate1)
return result