Leetcode169 多數元素 摩爾投票

2021-10-01 21:07:59 字數 811 閱讀 8328

leetcode上有如下的題:

169.多數元素

給定乙個大小為 n 的陣列,找到其中的多數元素。多數元素是指在陣列**現次數大於 ⌊ n/2 ⌋ 的元素。

你可以假設陣列是非空的,並且給定的陣列總是存在多數元素。

示例 :

輸入: [2,2,1,1,1,2,2]

輸出: 2

乍一看的時候,直接想用hashmap來做,鍵是元素,值是元素的count。

這是第一種方法:其時間和空間複雜度都是是o(n)。

第二種方法是通過排序陣列,然後取陣列的中位數:因為多數元素是超過了半數的,所以中位數=眾數,該方法需要排序,如果是使用原地排序,那麼時間複雜度是o(nlogn),空間複雜度是o(1)。

第三種方法,就是使用摩爾投票。

如果我們把眾數記為 +1 ,把其他數記為 -1,將它們全部加起來,顯然和大於 0 ,從結果本身我們可以看出眾數比其他數多。

我們當然並不知道哪個數最開始是眾數,所以我們把陣列眾第乙個遇到的數作為眾數候選(candidate)。

然後迴圈遍歷,如果用計數器表示這個眾數候選比其他數數目多多少。如果計數器變成了0,那麼不認為它是眾數。取它後乙個數作為新的眾數。

注意,我們這裡所說的眾數,其數目超過了一半,如果少於一半,顯然不能用方法二和這裡的方法三。

class

solution

count +=

(num == candidate)?1

:-1;

}return candidate;

}}

LeetCode 169 多數元素

給定乙個大小為 n 的陣列,找到其中的多數元素。多數元素是指在陣列 現次數大於 n 2 的元素。你可以假設陣列是非空的,並且給定的陣列總是存在多數元素。示例 1 輸入 3,2,3 輸出 3 示例 2 輸入 2,2,1,1,1,2,2 輸出 2 思路一 既然是多數且超過n 2,那麼排序之後,這些數中間...

LeetCode 169 多數元素

題目描述 給定乙個大小為 n 的陣列,找到其中的多數元素。多數元素是指在陣列 現次數大於 n 2 的元素。你可以假設陣列是非空的,並且給定的陣列總是存在多數元素。法 1 直接遍歷 時間複雜度 o n 2 空間複雜度 o 1 public intmajorityelement1 int nums if...

leetcode169 多數元素

用乙個變數和計數器輔助,變數存放當前元素的值a,計數器統計當前元素出現次數n 如果遇到的元素和a不一樣,則n減一,如果n為零,則把a替換成遇到的元素,b設為1 最後的a即為要求的多數元素 class solution count candidate num 1 1 return candidate ...