Leetcode 169:求眾數(最詳細的解法!!!)
給定一個大小為 n 的陣列,找到其中的眾數。眾數是指在陣列中出現次數大於 ⌊ n/2 ⌋
的元素。
你可以假設陣列是非空的,並且給定的陣列總是存在眾數。
示例 1:
輸入: [3,2,3]
輸出: 3
示例 2:
輸入: [2,2,1,1,1,2,2]
輸出: 2
解題思路
首先想到的做法當然是統計nums
中的所有元素個數,然後將最多的那個取出來即可。
from collections import Counter
class Solution:
def majorityElement(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
nums_dict = Counter(nums)
most_val = nums_dict.most_common(1)
return most_val[0][0]
這當然不是最快的方法。我們一直有一個條件沒有使用眾數是指在陣列中出現次數大於⌊ n/2 ⌋
的元素。那麼問題就很容易了,我們可以先將nums
排序,然後返回中間元素的值即可(眾數的個數大於一半,排好序的nums
中間元素一定是眾數)
class Solution:
def majorityElement(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
nums.sort()
return nums[len(nums)//2]
這個問題最好的解法就是摩爾投票法
class Solution:
def majorityElement(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
res = cnt = 0
for num in nums:
if cnt == 0:
res = num
cnt += 1
elif res == num:
cnt += 1
else:
cnt -= 1
return res
我們的時間複雜度就變成了O(n)
,空間複雜度為O(1)
。
我將該問題的其他語言版本新增到了我的GitHub Leetcode
如有問題,希望大家指出!!!
相關文章
- LeetCode169求眾數——分治LeetCode
- LeetCode每日一題:求眾數(No.169)LeetCode每日一題
- LeetCode 之 JavaScript 解答第169題 —— 求眾數 I(Majority Element)LeetCodeJavaScript
- Leetcode 137:只出現一次的數字 II(最詳細的解法!!!)LeetCode
- 【leetcode】求眾數LeetCode
- 【演算法】求眾數-js解法演算法JS
- Leetcode 253:Meeting Rooms II(超詳細的解法!!!)LeetCodeOOM
- Leetcode刷題——求眾數LeetCode
- 每日一道演算法題--leetcode 169--求眾數--python--兩種方法演算法LeetCodePython
- Leetcode 960:刪列造序 III(超詳細的解法!!!)LeetCode
- 【LeetCode】求眾數(四種方法)LeetCode
- 【LeetCode】169. 多數元素LeetCode
- 2024.9.4 leetcode169 多數元素 (C++)LeetCodeC++
- 2024.9.4 leetcode 169 多數元素 (雜湊表)LeetCode
- 最難數獨的快速解法 - pythonPython
- 求眾數
- Leetcode 167:兩數之和 II - 輸入有序陣列(最詳細解決方案!!!)LeetCode陣列
- LeetCode 169. Majority ElementLeetCode
- Leetcode 344:驗證迴文串(最詳細解決方案!!!)LeetCode
- 一道求餘數小學數學題的解法
- 詳解leetcode146題【LRU (最近最少使用) 快取機制】(附js最優解法!)LeetCode快取JS
- 雜湊求眾數
- openstack完整的部署(最詳細)
- Semaphore最詳細解析
- 最詳細的spring(IOC、AOP)教程Spring
- 水題 求眾數 (hash的練習)
- Leetcode:2. 兩數相加(C++帶詳細註釋)LeetCodeC++
- 最詳細STL(一)vector
- 每日一算--求眾數
- 演算法題:求眾數演算法
- 優化的求眾數方法 - 摩爾投票演算法(演算法思想+求眾數的三種方法+摩爾投票演算法改進版求眾數 II)優化演算法
- 史上最詳細的Hadoop環境搭建Hadoop
- 史上最為詳細的javascript繼承JavaScript繼承
- LeetCode 每日一題,用 Go 實現兩數之和的非暴力解法LeetCode每日一題Go
- 可能是最詳細的字元編碼詳解字元
- leetcode 解題 3. 無重複字元的最長子串-python3@ 官方,暴力解法和視窗滑動解法LeetCode字元Python
- 演算法:Majority Element(求眾數)演算法
- 全網最詳細的AbstractQueuedSynchronizer(AQS)原始碼剖析(三)條件變數AQS原始碼變數