題目:求眾數
給定乙個大小為 n 的陣列,找到其中的眾數。眾數是指在陣列**現次數大於 ⌊ n/2 ⌋ 的元素。
你可以假設陣列是非空的,並且給定的陣列總是存在眾數。
示例:
輸入: [3,2,3],輸出: 3
輸入: [2,2,1,1,1,2,2],輸出: 2
分析:馬上能想到的,就是構建數頻字典,然後找出數量大於n/2的元素即可。
引申一下,數學思維:根據題設的條件,眾數的數量大於總數的一半,那麼陣列排序後肯定位於陣列的中間位置。
解法1: 數頻字典
class solution(object):
def majorityelement(self, nums):
""":type nums: list[int]
:rtype: int
"""n = len(nums)
if n == 1:
return nums[0]
dic = {}
for num in nums:
if num in dic.keys():
dic[num] += 1
if dic[num] > n/2:
return num
else:
dic[num] = 1
解法2#:數學思維
class solution(object):
def majorityelement(self, nums):
""":type nums: list[int]
:rtype: int
"""n = len(nums)
if n == 1:
return nums[0]
return sorted(nums)[n//2]
解法3#:摩爾投票法
class solution(object):
def majorityelement(self, nums):
""":type nums: list[int]
:rtype: int
"""if len(nums)<1:
return
result = nums[0]
count = 1
for i in range(1,len(nums)):
if result == nums[i]:
count += 1
else:
count -=1
if count ==0:
result = nums[i+1]
return result
參考: LeetCode實戰 求眾數
you may assume that the array is non empty and the majority element always exist in the array.example 1 input 3 2,3 output 3example 2 input 2 2,1 1,1 ...
leetcode 演算法 求眾數 169
leetcode 傳送門 給定乙個大小為 n 的陣列,找到其中的眾數。眾數是指在陣列 現次數大於 n 2 的元素。你可以假設陣列是非空的,並且給定的陣列總是存在眾數。示例 1 輸入 3,2,3 輸出 3 示例 2 輸入 2,2,1,1,1,2,2 輸出 2 本題是求陣列 現次數大於一半的元素。乙個基...
leetcode階段總結 求眾數
169.多數元素 229.求眾數 ii 摩爾投票法基於這樣乙個事實,當乙個數的重複次數超過陣列長度的一半,每次將兩個不相同的數刪除,最終剩下的就是要找的數。為了解釋清楚這個問題,首先來看leetcode的第169題。給定乙個大小為 n 的陣列,找到其中的多數元素。多數元素是指在陣列 現次數大於 n ...