【LeetCode】169. 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.

Credits:
Special thanks to @ts for adding this problem and creating all test cases.

 

每找出两个不同的element,则成对删除。最终剩下的一定就是所求的。

可扩展到⌊ n/k ⌋的情况,每k个不同的element进行成对删除。

证明可参见我在Discussion上的分析https://oj.leetcode.com/discuss/19151/solution-computation-space-problem-can-extended-situation

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        int candidate = 0;
        int count = 0;
        for(int i = 0; i < nums.size(); i ++)
        {
            if(count == 0)
            {
                candidate = nums[i];
                count = 1;
            }
            else
            {
                if(nums[i] == candidate)
                    count ++;
                else
                    count --;
            }
        }
        return candidate;
    }
};

posted @ 2014-12-22 10:38  陆草纯  阅读(9667)  评论(6编辑  收藏  举报