leetcode 169. Majority Element

给定一个数组,其中一个数字出现的次数超过整个数组的一半,求这个数字。数组非空且必有解。

解法有二:

哈希:

    map<int, int> m;
    int majorityElement(vector<int>& nums) {
        int ret;
        int ret_time = 0;
        
        for (auto i : nums) {
            m[i]++;
            if (m[i] > ret_time) {
                ret_time = m[i];
                ret = i;
                if (ret_time > nums.size() / 2)
                    return i;
            }
        }
        return ret;
    }

把map改为unordered_map即为哈希,但更慢:-(,肯定是测试集里有数字比较大,坑。

摩尔投票算法:

    int majorityElement(vector<int>& nums) {
        int now = 0, big = nums[0];
        
        for (auto e : nums) {
            if (now == 0)
                big = e;
            if (e == big)
                now++;
            else
                now--;
        }
        return big;
    }

未完待续。。。

可参考:

http://blog.csdn.net/u012501459/article/details/46820823

http://lib.csdn.net/article/datastructure/18446

posted on 2018-01-29 18:17  willaty  阅读(115)  评论(0编辑  收藏  举报

导航