剑指offer(39)
剑指offer(39)
剑指 Offer 39. 数组中出现次数超过一半的数字
难度简单279
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:
输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]
输出: 2
限制:
1 <= 数组长度 <= 50000
1.排序后取中值
class Solution {
public:
int majorityElement(vector<int>& nums) {
sort(nums.begin(),nums.end());
int n=nums.size();
return nums[n/2];
}
};
2.摩尔投票
原理就是把众数全记为+1,其余记为-1,他们的和必定大于0;因此遍历数组,先假设第1个数是众数,如果和小于0,那么就更换众数
class Solution {
public:
int majorityElement(vector<int>& nums) {
int majority=-1;
int cnt=0;
for(int i=0;i<nums.size();i++){
if(nums[i]==majority){
cnt++;
}else{
cnt--;
}
if(cnt<0){
majority=nums[i];
cnt=1;
}
}
return majority;
}
};
本文来自博客园,作者:{BailanZ},转载请注明原文链接:https://www.cnblogs.com/BailanZ/p/16217655.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理