2021/3/26,今天看到了个很有意思的题:
这是一道面试问的题,但是想不到除了遍历标记和排序也没有什么优化的方法。然后看了一个大佬的思路顿时感觉自己还是太笨了。我们既然要求最多出现次数的数,我们可以将两两不相同的数消去,这样最后剩下的数就是出现次数超过一半的数了。
c++参考代码:
class Solution {
public:
int majorityElement(vector<int>& nums) {
int now=0,sum=0;
for(int i=0;i<nums.size();i++)
{
if(sum==0)
now=nums[i];
if(now==nums[i])
sum++;
else
sum--;
}
return now;
}
};
时间复杂度O(N),空间复杂度O(1);