演算法題:求眾數
求眾數
給定一個大小為 n 的陣列,找到其中的眾數。眾數是指在陣列中出現次數大於 ⌊ n/2 ⌋
的元素。
你可以假設陣列是非空的,並且給定的陣列總是存在眾數。
示例 1:
輸入: [3,2,3] 輸出: 3
示例 2:
輸入: [2,2,1,1,1,2,2] 輸出: 2
解題思路:題目要求眾數的個數一定是要大於整個陣列的1/2的,所以眾數的數量只有一個,利用摩爾投票法,遇到相同的元素count+1,不同的元素count-1,只要到最後count>0的數一定是數量過半的。
從第一個數開始,往後找,如果跟它相同,那麼count加1,如果不同count-1,相當於抵消了,然後等到count等於0,說明這個數的數量跟前面其他數的數量之和相同,此時這個數和其他數暫時都不是數量過半的數,再從後面重新開始找。直到剩下最後一個數,它的count一定大於0,也就是最終的眾數。
class Solution {
public:
int majorityElement(vector<int>& nums) {
//摩爾投票法
int count=0;
int item=nums[0];
for(int i=0;i<nums.size();i++){
if(item==nums[i])
count++;
else
count--;
if(count==0){
i++;
item=nums[i];
count=1;
}
}
return item;
}
};
相關文章
- 演算法面試題彙總_2求眾數演算法面試題
- Leetcode刷題——求眾數LeetCode
- 演算法:Majority Element(求眾數)演算法
- 【演算法】求眾數-js解法演算法JS
- 【20190326】【每天一道演算法題】求眾數(分治演算法)演算法
- 優化的求眾數方法 - 摩爾投票演算法(演算法思想+求眾數的三種方法+摩爾投票演算法改進版求眾數 II)優化演算法
- 【演算法】已知必存在眾數,求該眾數 -- Boyer-Moore 投票演算法演算法
- 求眾數
- LeetCode每日一題:求眾數(No.169)LeetCode每日一題
- 水題 求眾數 (hash的練習)
- 【leetcode】求眾數LeetCode
- 分治演算法-眾數問題演算法
- 雜湊求眾數
- 求眾數、排序演算法、二分法排序演算法
- 每日一道演算法題--leetcode 169--求眾數--python--兩種方法演算法LeetCodePython
- 每日一算--求眾數
- 【LeetCode】求眾數(四種方法)LeetCode
- LeetCode169求眾數——分治LeetCode
- LeetCode 之 JavaScript 解答第169題 —— 求眾數 I(Majority Element)LeetCodeJavaScript
- 一個小小的演算法題:求兩數之和演算法
- 【演算法練習】(8)眾數演算法
- Leetcode 169:求眾數(最詳細的解法!!!)LeetCode
- 求取眾數及重數的演算法實現(Java)演算法Java
- 分治法求眾數和重數(含檔案輸入輸出)
- 每天一道演算法題:求兩個排序陣列的中位數演算法排序陣列
- [資料結構與演算法]15 兩行程式碼就可以搞定求眾數,但還有更巧的資料結構演算法行程
- 演算法題:三數之和演算法
- 演算法題:ID數量演算法
- 一道求餘數小學數學題的解法
- Leetcode刷題之 【最近的請求次數】LeetCode
- ACM演算法——數學專題ACM演算法
- 每日一題演算法:2020年9月24日 [二叉搜尋樹中的眾數] findMode每日一題演算法
- 求最大公公約數(最大公因數)—— 歐幾里得演算法演算法
- 演算法設計與分析:求兩個自然數的最大公約數演算法
- 均值、中位數、眾數
- 關於在request請求時,處理請求引數的問題
- 【演算法】GPLT - L1 - 求整數段和(10分)演算法
- 演算法金 | 平均數、眾數、中位數、極差、方差,標準差、頻數、頻率 一“統”江湖演算法