您的位置:首页 > 其它

169. Majority Element Easy

2017-03-05 20:59 155 查看
这题虽然只是个简单题,但是我觉得还是很值得推敲,主要是考虑怎样写更简短。

一开始我觉得先排序,然后返回第n/2个数就可以了。代码如下:

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        sort(nums.begin(), nums.end());
        return nums[nums.size() / 2];
    }
};

实际上也AC了,但是题目中说的出现次数有向下取整,也就是说,当size为奇数时,有可能majority的出现次数不到一半,这样就行不通了。比如 2 2 2 3 4 5 6,总共七个数,用上面的解法,返回的答案是错误的。不知道为什么这样也能AC,可能是取整的方法有误差?

看讨论有人总结了6种方法,除了上面的那种,其它的都很短,还发现了几个有意思的函数,我自己又写了一个稳妥一点的。代码如下:

class Solution {

public:

    int majorityElement(vector<int>& nums) {

    set<int> s;

        for (int i = 0; i < nums.size(); ++i)

        if(s.find(nums[i]) == s.end()){

        if(count(nums.begin(), nums.begin() + nums.size(), nums[i]) > nums.size() / 2) return nums[i];

        s.insert(nums[i]);

        }

    }

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode