lc hot 100之:多数元素
这个题目一眼哈希表哈哈哈哈哈但是总觉得应该有更巧妙的思想,看了答案发现给了5种解答hhh记录一下最巧妙的一种——摩尔投票【正负相抵】
假设:本题中要找的这个数叫“众数”
有结论:记众数为票数+1,非众数为票数-1.那么总票数一定是>0的,因为众数的个数大于n/2,抵消后一定多。
如何求解呢?
遍历数组,当票数和为0时消去遍历的数,不断消去,直到最后的票数和不为0时,就找到众数了。
(可能有点抽象大家可以画一下不行可以看看题解的动画qvq
代码:
class Solution {
public:int majorityElement(vector<int>& nums) {int votes=0;int res=nums[0];for(int i=0;i<nums.size();i++){if(nums[i]==res)votes++;elsevotes--;//投票抵消阶段if(votes==0)res=nums[i+1];//投票为0,更新众数}return res;return 0;}
};
这位佬的动画做的特别好!一看就懂了哈哈哈谢谢谢谢