欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > 力扣HOT100之技巧:169. 多数元素

力扣HOT100之技巧:169. 多数元素

2025/9/8 14:06:55 来源:https://blog.csdn.net/weixin_52151595/article/details/148611986  浏览:    关键词:力扣HOT100之技巧:169. 多数元素


这道题如果不考虑空间复杂度和时间复杂度的限制的话很好做,一种思路是通过一次遍历将所有元素的数量记录在一个哈希表中,然后我们直接返回出现次数最多的键即可。另一种思路是直接对数组进行排序,数组中间的值一定是多数元素,因为该元素超过半数,在有序的状态下,无论如何都会在数组的中间位置出现,这个也很好想。
但是考虑时间和空间的限制,这道题就很难想了,这道题我是看了华南溜达虎的视频才做出来的,感觉他对摩尔投票法讲解的还不错,也可以结合K神的题解来看,更加通俗易懂。
我们定义countresultresult代表多数元素,而count对应多数元素的数量,初始化为0,我们先假定nums[0]为多数元素,遍历整个数组nums,当nums[i] == result时,我们将当前多数元素的数量+1,然后遍历下一个元素,当nums[i] != result时,我们就将count减一,当count被减为负数时,说明当前认定的多数元素可能不是真正的多数元素,我们将result赋值为当前的nums[i],并将count赋值为1(对应当前多数元素的数量)
经历过一次遍历后,由于多数的数量超过半数(至少比其他的元素个数之和多1),无论数组如何排列,最后一定是多数的票数占优,最后result一定会被赋值为多数。

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词