Leetcode 求眾數 Python實現

2021-09-26 18:40:32 字數 1457 閱讀 5412

題目:求眾數

給定乙個大小為 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 ...