主元素 II

主元素 II 

給定一個整型數組,找到主元素,它在數組中的出現次數嚴格大於數組元素個數的三分之一。


 注意事項

數組中只有唯一的主元素

樣例

給出數組[1,2,1,2,1,3,3] 返回 1

挑戰 

要求時間複雜度爲O(n),空間複雜度爲O(1)。

相關題目 

思路:這道題和上一道題思路基本一樣,也是用抵消的方法,不過這個只保證主元素多於總元素的三分之一,而在一個數組中任意一個數出現次數大於n/3總數最多有兩個,所以用抵消的方法找出兩個最多的,再遍歷一遍找出誰是主元素即可(其他大於主元素的k分之一方法都一樣)

class Solution {
public:
    /*
     * @param nums: a list of integers
     * @return: The majority number that occurs more than 1/3
     */
    int majorityNumber(vector<int> &nums) {
        // write your code here
        int can1=0,can2=0,num1=0,num2=0;//找兩個次數最多的數
        for(auto n:nums)
        {
            if(num1==0)
            {
                can1=n;
                num1++;
            }
            else if(can1==n)//一定緊跟(num==0)後,保證剛開始相同的數在一個裏
            num1++;
            else if(num2==0)
            {
            can2=n;
            num2++;
            }
            else if(can2==n)
            num2++;
            else
            {num1--,num2--;
            }
        }
        num1=num2=0;
        for(auto n:nums)//第二次遍歷
        {
            if(n==can1)
            num1++;
            else if(n==can2)
            num2++;
        }
        return num1>num2? can1:can2;
        
    }
};

主元素 II 

Accepted

太牛了,把AC的喜悅分享給你的朋友吧!
2


發佈了88 篇原創文章 · 獲贊 28 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章