leetcode上有如下的題:
169.多數元素乍一看的時候,直接想用hashmap來做,鍵是元素,值是元素的count。給定乙個大小為 n 的陣列,找到其中的多數元素。多數元素是指在陣列**現次數大於 ⌊ n/2 ⌋ 的元素。
你可以假設陣列是非空的,並且給定的陣列總是存在多數元素。
示例 :
輸入: [2,2,1,1,1,2,2]
輸出: 2
這是第一種方法:其時間和空間複雜度都是是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 ...