《剑指offer》面试题39. 数组中出现次数超过一半的数字
2024-09-06 12:33:21
问题描述
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:
输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]
输出: 2
限制:
1 <= 数组长度 <= 50000
代码
时间复杂度\(O(N)\),空间复杂度\(O(N)\)
class Solution {
public:
int majorityElement(vector<int>& nums) {
map<int,int> table;
int n = nums.size(),ans;
for(int& num:nums)
{
++table[num];
if(n % 2 == 0 && table[num] >= n/2 )
{
ans = num;
break;
}
else if(n % 2 == 1 && table[num] >= n/2+1)
{
ans = num;
break;
}
}
return ans;
}
};
结果
执行用时 :56 ms, 在所有 C++ 提交中击败了23.94%的用户
内存消耗 :19 MB, 在所有 C++ 提交中击败了100.00%的用户
代码
因为这个元素一定超过总个数的一半,因此我们排序后,中间的这个元素即为所求,时间复杂度\(O(N\log(N))\),空间复杂度\(O(1)\):
class Solution {
public:
int majorityElement(vector<int>& nums) {
int n = nums.size();
if(n == 1)return nums[0];
sort(nums.begin(),nums.end());
return nums[n/2];
}
};
结果
执行用时 :108 ms, 在所有 C++ 提交中击败了5.37%的用户
内存消耗 :18.9 MB, 在所有 C++ 提交中击败了100.00%的用户
代码
不同的元素相互抵消,剩下的元素一定是重复过半的。时间复杂度\(O(N)\)空间复杂度\(O(1)\)
class Solution {
public:
int majorityElement(vector<int>& nums) {
int ans,count = 0;
for(int num:nums)
{
if(count == 0)
{
ans = num;
++count;
}
else{
ans == num?++count:--count;
}
}
return ans;
}
};
结果
执行用时 :28 ms, 在所有 C++ 提交中击败了67.69%的用户
内存消耗 :18.7 MB, 在所有 C++ 提交中击败了100.00%的用户
最新文章
- [原创]zepto打造一款移动端划屏插件
- 面试题目——《CC150》位操作
- Updating My Notepad_1.1
- eclipse中Maven创建WEB项目
- Archlinux添加MP3播放器
- “人少也能办大事”---K2 BPM老客户交流会
- haproxy部署及配置
- linux 线程备忘
- Android 实时文件夹
- Unix 主机认证配置
- Linux screen 常用命令
- Laravel框架使用的一些注意细节(一)
- vue2 过渡 轮播图
- 自兴人工智能-------------Python入门基础(1)
- spring学习总结——高级装配学习二(处理自动装配的歧义性)
- Spock - Document -01- introduction &; Getting Started
- XamarinEssentials教程获取首选项的值
- 【题解】Luogu P2319 [HNOI2006]超级英雄
- day32 信号量 事件 管道 进程池
- day 58 关于bootstrap
热门文章
- SpringBoot Redis 发布订阅模式 Pub/Sub
- Kali渗透安卓手机
- Django查询结果以时间正序或者倒序排列
- Shell之Sed常用用法
- SPQuery ViewAttributes Sharepoint列表查询范围
- 三、Uniapp+vue+腾讯IM+腾讯音视频开发仿微信的IM聊天APP,支持各类消息收发,音视频通话,附vue实现源码(已开源)-配置项目并实现IM登录
- 用setTimeout实现setInterval
- 浅析.netcore中的Configuration
- 【LeetCode】1110. Delete Nodes And Return Forest 解题报告 (C++)
- 【九度OJ】题目1177:查找 解题报告