演算法題:求眾數

sindyra發表於2019-08-10

求眾數

給定一個大小為 的陣列,找到其中的眾數。眾數是指在陣列中出現次數大於 ⌊ 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;
    }
};

 

相關文章