【LeetCode】169.Majority Element (Easy)

来源:互联网 发布:张国荣同性恋 知乎 编辑:程序博客网 时间:2024/05/27 20:52

题目要求:n个元素的数组,找出现次数大于[n/2]的数(保证存在)


用map可以过:

 int majorityElement(vector<int>& nums) {        map<int, int> m;        for (int i = 0; i != nums.size(); i++)            m[nums[i]]++;        for (map<int, int>::iterator i = m.begin(); i != m.end(); i++)            if (i->second > nums.size() / 2)                return i-> first;    return -1;

Discuss里看到的做法:

int major=num[0], count = 1;for(int i=1; i<num.length;i++){          if(count==0)          {                count++;                major=num[i];           }           else if(major==num[i])                count++;           else count--;}return major;
相邻两个元素不一样就抵消掉,majority一定出现次数大于剩下才元素出现次数之和,不会都被抵消,剩下的就是majority。

只在majority存在的时候可以用。{3, 3, 4, 5, 6},3出现最多,但不是majority,返回6



0 0