力扣解題思路 169 多數元素

2021-10-08 18:40:57 字數 964 閱讀 8275

思路:給定乙個大小為 n 的陣列,找到其中的多數元素。多數元素是指在陣列**現次數大於 ⌊ n/2 ⌋ 的元素。你可以假設陣列是非空的,並且給定的陣列總是存在多數元素。

首先最直觀的方法就是先排序,最中間那個數出現次數一定多於 n / 2。

public

intmajorityelement

(int

nums)

這種方法時間複雜度和空間複雜度為o(nlogn)、o(logn)。如果使用語言自帶的排序演算法,需要使用 o(logn) 的棧空間。如果自己編寫堆排序,則只需要使用 o(1) 的額外空間。

如果我們希望只遍歷一遍陣列就得到答案,也就是時間複雜度為o(n)則可以使用雜湊表:

public

intmajorityelement

(int

nums)

return-1

;}

時間複雜度和空間複雜度為o(n)、o(n)。

這裡我們也可以利用 boyer-moore majority vote algorithm (摩爾投票法)來解決這個問題,使得時間複雜度為 o(n)。可以這麼理解該演算法:使用 cnt 來統計乙個元素出現的次數,當遍歷到的元素和統計元素不相等時,令 cnt–。

如果前面查詢了 i 個元素,且 cnt == 0,說明前 i 個元素沒有 majority,或者有 majority,但是出現的次數少於 i / 2,因為如果多於 i / 2 的話 cnt 就一定不會為 0。此時剩下的 n - i 個元素中,majority 的數目依然多於 (n - i) / 2,因此繼續查詢就能找出 majority。

public

intmajorityelement

(int

nums)

return majority;

}

力扣169 多數元素

給定乙個大小為 n 的陣列,找到其中的多數元素。多數元素是指在陣列 現次數大於 n 2 的元素。可以假設陣列不為空,並且一定存在多數元素 示例 示例 1 輸入 3,2,3 輸出 3 示例 2 輸入 2,2,1,1,1,2,2 輸出 2 解題思路 如果乙個陣列中有有乙個數大於陣列元素的一半,那麼那這個...

多數元素(力扣169題)

題目 給定乙個大小為 n 的陣列,找到其中的多數元素。多數元素是指在陣列 現次數大於 n 2 的元素。你可以假設陣列是非空的,並且給定的陣列總是存在多數元素。分析 1 多數元素即在一組數 現次數大於 n 2 的元素 2 多數元素在這個陣列中一定存在 這兩個條件就決定了這種多數元素一定只可能是一種數,...

力扣169題 多數元素

leetcode刷題筆記 給定乙個大小為 n 的陣列,找到其中的多數元素。多數元素是指在陣列 現次數 大於 n 2 的元素。你可以假設陣列是非空的,並且給定的陣列總是存在多數元素。示例1輸入 3,2,3 輸出 3 示例2輸入 2,2,1,1,1,2,2 輸出 2 題目上說給定的陣列總是存在多數元素,...