LeetCode Majority Element

来源:互联网 发布:ct young无网络连接 编辑:程序博客网 时间:2024/06/06 23:51

思路:

分享DISCUSS里的非常trick的一种解法,非常nice:
从头开始遍历,如果遇到两个不同的元素,则去掉这两个元素,最后剩下的一定是majority element。题目给的数据保证了一定存在majority element。

时间复杂度O(N),空间复杂度O(1)。

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

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

0 0