leetcode 演算法 求眾數 169

2021-09-21 12:59:52 字數 831 閱讀 3908

leetcode 傳送門

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

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

示例 1:

輸入: [3,2,3]

輸出: 3

示例 2:

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

輸出: 2

本題是求陣列**現次數大於一半的元素。乙個基本想法就是用乙個map儲存每個元素的出現次數,然後返回次數最多的那個對應的元素。

這種方法時間複雜度和空間複雜度都是o(n

)o(n)

o(n)

,不是很好。

這裡我們要介紹的是一種叫做摩爾投票法的方法,由於眾數出現次數大於陣列長度的一半,因此我們每次從這個陣列中消除一對值不同的元素,最終剩下的元素就一定是眾數。因為眾數出現次數大於一半,所以說一定不會被消除完。

基於這個思想我們就可以設計出本題的演算法。

首先設陣列為nums,用變數majority儲存眾數,count儲存majority的出現次數。

如果count==0,則把當前遍歷元素賦值給majority,然後count賦值為1;

如果nums[i]==majority時,count++;

否則,count–;//這裡相當於消除不同的過程

最終返回majority即可。

class

solution

else

if(nums[i]

==majority)

else

}return majority;

}}

演算法 求眾數

給定乙個大小為 n 的陣列,找到其中的眾數。眾數是指在陣列 現次數大於 n 2 的元素。你可以假設陣列是非空的,並且給定的陣列總是存在眾數。示例 1 輸入 3,2,3 輸出 3 示例 2 輸入 2,2,1,1,1,2,2 輸出 2class solution else return curnum c...

LeetCode實戰 求眾數

you may assume that the array is non empty and the majority element always exist in the array.example 1 input 3 2,3 output 3example 2 input 2 2,1 1,1 ...

演算法2 LeetCode 169 求眾數

給定乙個大小為 n 的陣列,找到其中的眾數。眾數是指在陣列中出現次數大於 n 2 的元素。你可以假設陣列是非空的,並且給定的陣列總是存在眾數。示例 1 輸入 3,2,3 輸出 3示例 2 輸入 2,2,1,1,1,2,2 輸出 2 public static int majorityelement ...