問題描述
- 給定一個大小爲 n 的數組,找到其中的衆數。衆數是指在數組中出現次數大於 ⌊ n/2 ⌋ 的元素。
- 你可以假設數組是非空的,並且給定的數組總是存在衆數。
示例 1:
輸入: [3,2,3]
輸出: 3
示例 2:
輸入: [2,2,1,1,1,2,2]
輸出: 2
問題分析
第一種取巧,由於測試用例不大,設置一個小點的零列表,每出現一次數字,對應索引上加一
第二種方法,讀取一個保留值,記錄當前可能衆數。設置一個數值記錄出現次數,同樣數字加一,不同減一,減到零時換保留值
因爲衆數始終多餘一半,排序後中間的數即爲衆數
代碼
#偷雞方法
class Solution:
def majorityElement(self, nums: List[int]) -> int:
list=[0,0,0,0]
for num in nums:
list[num]=list[num]+1
for x in range(4):
if list[x]>len(nums)/2:
return x
#設置保留值方法
class Solution:
def majorityElement(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
cnt, ret = 0, 0
for num in nums:
if cnt == 0:
ret = num
if num != ret:
cnt -= 1
else:
cnt += 1
return ret
#排序取值方法
class Solution:
def majorityElement(self, nums: List[int]) -> int:
nums.sort()
return nums[int(len(nums)/2)]