Leetcode No 169 多數元素

2021-10-22 02:19:51 字數 994 閱讀 8280

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

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

示例 1:

輸入:[3,2,3]

輸出:3

示例 2:

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

輸出:2

高階:嘗試設計時間複雜度為 o(n)、空間複雜度為 o(1) 的演算法解決此問題。

我們知道出現次數最多的元素大於 floor⌊ n/2⌋ 次,所以可以用雜湊表來快速統計每個元素出現的次數。

我們使用雜湊對映(hashmap)來儲存每個元素以及出現的次數。對於雜湊對映中的每個鍵值對,鍵表示乙個元素,值表示該元素出現的次數。

我們用乙個迴圈遍歷陣列 nums 並將陣列中的每個元素加入雜湊對映中。在這之後,我們遍歷雜湊對映中的所有鍵值對,返回值最大的鍵。我們同樣也可以在遍歷陣列 nums 時候使用打擂台的方法,維護最大的值,這樣省去了最後對雜湊對映的遍歷。

class solution 

}return -1;}}

時間複雜度:o(n),其中 n 是陣列 nums 的長度。我們遍歷陣列 nums 一次,對於 nums 中的每乙個元素,將其插入雜湊表都只需要常數時間。如果在遍歷時沒有維護最大值,在遍歷結束後還需要對雜湊表進行遍歷,因為雜湊表中占用的空間為 o(n)(可參考下文的空間複雜度分析),那麼遍歷的時間不會超過 o(n)。因此總時間複雜度為 o(n)。

空間複雜度:o(n)。雜湊表最多包含 n - ⌊n/2⌋ 個鍵值對,所以占用的空間為 o(n)。這是因為任意乙個長度為 n 的陣列最多只能包含 n 個不同的值,但題中保證 nums 一定有乙個眾數,會占用(最少) ⌊n/2⌋+1 個數字。因此最多有 n−(⌊n/2⌋+1) 個不同的其他數字,所以最多有 n−⌊n/2⌋ 個不同的元素。

169 多數元素

解題思路 1.將陣列從小到大排序 2.第nums.length 2處的元素就是我們要求的元素,直接返回nums nums.length 2 即可 實現 class solution 解題思路 1.變數val,初始值為nums 0 記錄當前的值,計數器cnt,記錄當前元素累計出現的情況,初始值為1 2...

169 多數元素

給定乙個大小為 n 的陣列,找到其中的多數元素。多數元素是指在陣列 現次數大於 n 2 的元素。你可以假設陣列是非空的,並且給定的陣列總是存在多數元素。示例 1 輸入 3,2,3 輸出 3 示例 2 輸入 2,2,1,1,1,2,2 輸出 2 分析 解法一 我們可以先排序,然後輸出在陣列 現次數大於...

169 多數元素

題目描述 給定乙個大小為 n 的陣列,找到其中的多數元素。多數元素是指在陣列 現次數大於 n 2 的元素。你可以假設陣列是非空的,並且給定的陣列總是存在多數元素。示例 1 輸入 3,2,3 輸出 3 示例 2 輸入 2,2,1,1,1,2,2 輸出 2 方法1 直接使用unordered map進行...