问题描述

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 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%的用户

最新文章

  1. [原创]zepto打造一款移动端划屏插件
  2. 面试题目——《CC150》位操作
  3. Updating My Notepad_1.1
  4. eclipse中Maven创建WEB项目
  5. Archlinux添加MP3播放器
  6. “人少也能办大事”---K2 BPM老客户交流会
  7. haproxy部署及配置
  8. linux 线程备忘
  9. Android 实时文件夹
  10. Unix 主机认证配置
  11. Linux screen 常用命令
  12. Laravel框架使用的一些注意细节(一)
  13. vue2 过渡 轮播图
  14. 自兴人工智能-------------Python入门基础(1)
  15. spring学习总结——高级装配学习二(处理自动装配的歧义性)
  16. Spock - Document -01- introduction &amp; Getting Started
  17. XamarinEssentials教程获取首选项的值
  18. 【题解】Luogu P2319 [HNOI2006]超级英雄
  19. day32 信号量 事件 管道 进程池
  20. day 58 关于bootstrap

热门文章

  1. SpringBoot Redis 发布订阅模式 Pub/Sub
  2. Kali渗透安卓手机
  3. Django查询结果以时间正序或者倒序排列
  4. Shell之Sed常用用法
  5. SPQuery ViewAttributes Sharepoint列表查询范围
  6. 三、Uniapp+vue+腾讯IM+腾讯音视频开发仿微信的IM聊天APP,支持各类消息收发,音视频通话,附vue实现源码(已开源)-配置项目并实现IM登录
  7. 用setTimeout实现setInterval
  8. 浅析.netcore中的Configuration
  9. 【LeetCode】1110. Delete Nodes And Return Forest 解题报告 (C++)
  10. 【九度OJ】题目1177:查找 解题报告