日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

[LeetCode]Majority Element

發(fā)布時間:2024/10/12 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [LeetCode]Majority Element 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目描述:

Given an array of size n, find the majority element. The majority element is the element that appears more than ? n/2 ? times.

You may assume that the array is non-empty and the majority element always exist in the array.

題目大意:

給定一個長度為n的數(shù)組,尋找其中的“眾數(shù)”。眾數(shù)是指出現(xiàn)次數(shù)大于?? n/2 ? 的元素。

你可以假設(shè)數(shù)組是非空的并且數(shù)組中的眾數(shù)永遠(yuǎn)存在。

解題思路:

“投票算法”,設(shè)定兩個變量candidate和count。candidate保存當(dāng)前可能的候選眾數(shù),count保存該候選眾數(shù)的出現(xiàn)次數(shù)。

遍歷數(shù)組num。

如果當(dāng)前的數(shù)字e與候選眾數(shù)candidate相同,則將計數(shù)count + 1

否則,如果當(dāng)前的候選眾數(shù)candidate為空,或者count為0,則將候選眾數(shù)candidate的值置為e,并將計數(shù)count置為1。

否則,將計數(shù)count - 1

最終留下的候選眾數(shù)candidate即為最終答案。

以上算法時間復(fù)雜度為O(n),空間復(fù)雜度為O(1)

Python代碼:

class Solution:# @param num, a list of integers# @return an integer def majorityElement(self, num): candidate, count = None, 0 for e in num: if count == 0: candidate, count = e, 1 elif e == candidate: count += 1 else: count -= 1 return candidate

官方解析:

時間復(fù)雜度: O(n2) — 蠻力法: 依次檢查每一個元素是否為眾數(shù)

時間復(fù)雜度: O(n), 空間復(fù)雜度: O(n) — 哈希表: 維護(hù)一個每一個元素出現(xiàn)次數(shù)的哈希表, 然后找到出現(xiàn)次數(shù)最多的元素

時間復(fù)雜度: O(n log n) — 排序: 在排序后找出連續(xù)重復(fù)出現(xiàn)次數(shù)最多的元素

平均時間復(fù)雜度: O(n), 最壞復(fù)雜度: 無窮大?— 隨機(jī)算法: 隨機(jī)選取一個元素計算其是否為眾數(shù). 如果不是, 就重復(fù)上一步驟直到找到為止。?由于選出眾數(shù)的概率 > 1 / 2, 因此期望的嘗試次數(shù) < 2

時間復(fù)雜度: O(n log n) — 分治法: 將數(shù)組拆成2半, 然后找出前一半的眾數(shù)A和后一半的眾數(shù)B。則全局眾數(shù)要么是A要么是B。?如果 A == B, 則它自然而然就是全局眾數(shù)。 如果不是, 則A和B都是候選眾數(shù), 則至多只需要檢查這兩個元素的出現(xiàn)次數(shù)即可。?時間復(fù)雜度, T(n) = T(n/2) + 2n = O(n log n).

時間復(fù)雜度: O(n) — Moore投票算法: 我們維護(hù)一個當(dāng)前的候選眾數(shù)和一個初始為0的計數(shù)器。遍歷數(shù)組時,我們看當(dāng)前的元素x:

  • 如果計數(shù)器是0, 我們將候選眾數(shù)置為 x 并將計數(shù)器置為 1
  • 如果計數(shù)器非0, 我們根據(jù)x與當(dāng)前的候選眾數(shù)是否相等對計數(shù)器+1或者-1
  • 一趟之后, 當(dāng)前的候選眾數(shù)就是所求眾數(shù). 時間復(fù)雜度 = O(n).

時間復(fù)雜度: O(n) — 位操作法: 我們需要32次迭代, 每一次計算所有n個數(shù)的第i位的1的個數(shù)。由于眾數(shù)一定存在,那么或者1的個數(shù) > 0的個數(shù) 或者反過來(但絕不會相同)。 眾數(shù)的第i位一定是計數(shù)較多數(shù)字。

轉(zhuǎn)載于:https://www.cnblogs.com/LearnToFly/p/4634353.html

總結(jié)

以上是生活随笔為你收集整理的[LeetCode]Majority Element的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。