博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Majority Element
阅读量:5085 次
发布时间:2019-06-13

本文共 577 字,大约阅读时间需要 1 分钟。

给定一个整数数组,其中有一个数字的出现次数大于总数组大小的一半。

思路一:快排,时间开销O(nlogn),空间开销O(logn),然后去数组的中间那个数字即可

思路二:采用打擂台的方法。只需要O(n)的时间开销,O(1)的空间开销。维护一个champion记录守擂人,count记录守擂人的生命数。然后依次遍历整个数组,如果数字相同则生命数+1,如果数字不同,则生命-1,如果生命降到0,则换上新的擂主。由于目标数字出现的个数占总的一半以上,因此目标数字作为守擂人一定能够站到最后。

 
  1. class Solution {
  2. public:
  3. int majorityElement(vector<int> &num) {
  4. int champion = num[0];
  5. int count = 1;
  6. for (size_t i = 1; i < num.size(); i++)
  7. {
  8. if (count == 0)
  9. {
  10. champion = num[i];
  11. count = 1;
  12. continue;
  13. }
  14. if (champion == num[i])
  15. {
  16. count++;
  17. }
  18. else
  19. count--;
  20. }
  21. return champion;
  22. }
  23. };

转载于:https://www.cnblogs.com/flyjameschen/p/4317681.html

你可能感兴趣的文章
Ajax之404,200等查询
查看>>
Aizu - 1378 Secret of Chocolate Poles (DP)
查看>>
csv HTTP简单表服务器
查看>>
OO设计的接口分隔原则
查看>>
数据库连接字符串大全 (转载)
查看>>
java类加载和对象初始化
查看>>
对于负载均衡的理解
查看>>
django简介
查看>>
window.event在IE和Firefox的异同
查看>>
常见的js算法面试题收集,es6实现
查看>>
IO流写出到本地 D盘demoIO.txt 文本中
查看>>
Windows10 下Apache服务器搭建
查看>>
HDU 5458 Stability
查看>>
左手坐标系和右手坐标系
查看>>
solr后台操作Documents之增删改查
查看>>
http://yusi123.com/
查看>>
文件文本的操作
查看>>
Ubuntu linux下gcc版本切换
查看>>
记一次Web服务的性能调优
查看>>
jQuery.form.js使用
查看>>