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 ...