Leetcode.Majority Element

Majority Element

Given an array of size n, find the majority element.
The majority element is the element that appears more than ⌊ n/2 ⌋ times.

You may assume that the array is non-empty and the majority element always exist in the array.

題目大意:
找出一個整型數組中出現次數超過一半的元素。

解題思路:
1.統計每個數字的出現次數。
2.對數組排序,位於中間的元素一定是出現次數超過一半的元素。
3.Moore’s Voting算法,每次刪掉集合中一對不同的元素,直到集合爲空或沒有不同元素。 若存在元素e出現頻率超過半數,那麼集合中最終只有元素e。

//統計每個數字的出現次數, 返回出現次數最多的元素
int majorityElement(vector<int>& nums) {
    int z;
    map<int, int> c;
    for (auto e = nums.begin(); e < nums.end(); e++){
        c[*e]++;
        if (c[*e] > c[z])
            z = *e;
    }
    return z;
}
//排序後輸出中間元素
int majorityElement(vector<int>& nums) {
    sort(nums.begin(), nums.end());
    return nums[nums.size()>>1];
}
//Moore's Voting算法
int majorityElement(vector<int>& nums) {
    int c, z = nums[0];
    for (auto e = nums.begin() + 1; e < nums.end(); e++){
        if (*e == z)
            c++;
        else if (!c)
            z = *e;
        else
            c--;
    }
    return z;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章