这道题在面试的时候被问到了,特记录如下:
题目: 给2*n+1个整数,存储在数组中,保证这些数中,有一个数的次数出现超过了n+1次,怎样求出那个出现次数超过n+1次的整数,比如有 五个数1,2,2,3,2; 那么这个数字就是2。 这道题中的数都可能非常大,10^9。
(1)基本的设计思想: 一个数字出现的次数超过了长度的一半, 那么我们可以这样认为这个数字出现的个数一定大于其他全部数字出现的个数之和。算法的步骤如下:
①设数组为data[],数组长度为n,i=1。置currentAxis=data[0],currentNum=1。
②当data[ i]==currentAxis时,currentNum++,转向④;否则转向③。
③currentNum–,当currentNum==0时,currentAxis=data[ i]。
④当i==data.length时, 转向⑤;否则,i++,转向②;
⑤返回currentAxis。
(2)算法的实现如下:

int funtion(int data[],int length){int currentAxis; //假设要求的元素的位置 int currentNum = 0; //要求元素的个数变量 for(int i =0;i<length;i++){if(currentNum ==0){  //如果要求的元素还没出现,设置要求的元素为现在要比较的元素 currentAxis=data[i]; currentNum=1; } else {  if(currentAxis==data[i])  //假设的结果与比较元素不同,假设结果个数增1,否则减1 currentNum++; else  currentNum--; } }  return currentAxis; //返回最终结果的位置。 }  

(3)时间复杂度为O(n)。空间复杂度O(1)。
【另解】本题最直接的方法就是对每个数字进行排序。然后输出出现次数最大的数字即可,但排序的时间复杂度最快也要O(nlog2n)。

查找出现次数超过一半的数相关推荐

  1. 28 数组中出现次数超过一半的数MoreThanHalfNum输入一个一维数组

    题目:数组中出现次数超过一半的数 要求:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超 ...

  2. 找出数组中出现次数超过一半的数

    算法--找出数组中出现次数超过一半的数      每当我看到经典的算法题,就怀念高中,感觉很多算法题就是高中的题目,谁叫哥只读了个专科,高数基本相当没学.      有空要看看高数啊,想当年数学那是相 ...

  3. 《编程题》找出数组中出现次数超过一半的数(时间复杂度O(n),空间复杂度为O(1))

    解析:该题目可以用mapreduce的wordcount思想做,就是存储键.值对,键存数字,值存该数字出现的次数,当然需要用一个变量记住出现次数超过一半的数了,说完了,开始撸起袖子干了. public ...

  4. 信息学奥赛一本通(1186:出现次数超过一半的数)

    1186:出现次数超过一半的数 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 15584     通过数: 7167 [题目描述] 给出一个含有n(0 < ...

  5. 出现次数超过一半的数(信息学奥赛一本通-T1186)

    [题目描述] 给出一个含有n(0 < n ≤ 1000)个整数的数组,请找出其中出现次数超过一半的数.数组中的数大于-50且小于50. [输入] 第一行包含一个整数n,表示数组大小: 第二行包含 ...

  6. 用Python找出数组中出现次数超过一半的数

    数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 计数+比较 不考虑效率,采用最简单的办法,遍历数组,使用 List 的 count() 方法统计元素出现的次数: def more_th ...

  7. 数组中出现次数超过一半的数

    数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 你可以假设数组是非空的,并且给定的数组总是存在多数元素. 示例 1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输 ...

  8. 【剑指offer-Java版】29数组中出现次数超过一半的数字

    数组中出现次数超过一半的数字 两种思路: 思路一:由于出现次数超过一半,所以如果对这个数组进行划分之后无论如何,位于数组下标 n/2的数字就是出现次数超过一半的数 所以问题就转换为了求划分一次之后 位 ...

  9. python剑指offer数组中出现次数超过一半的数字

    题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...

最新文章

  1. 【嵌入式开发】ARM 代码搬移 ( ARM 启动流程 | 代码搬移 起点 终点 | 链接地址 | 汇编代码 )
  2. org.jboss.netty.internal.LoggerConfigurator.DESCRIBED is already registered 的解决办法
  3. 两步搞定Hyperledger主打区块链解决方案Fabric
  4. ue4材质节点怎么用_UE4材质教程
  5. iOS经典面试题之深入分析block相关高频面试题
  6. 范围查询 BETWEEN AND
  7. vue2 怎么用vite_vue3vite简介
  8. 特权级概述(哥子就想知道CPU是如何验证特权级的)GATE+TSS
  9. asp.net 多条件查询
  10. hihoCoder #1104 Suzhou Adventure
  11. linux 离线迅雷下载软件,Linux 迅雷离线客户端!!!!!!!!!!!!
  12. 魅族 系统更新服务器,Flyme
  13. 霍金门徒:计算机如何比人更懂世界
  14. 华为云发布实时音视频行业加速器,为企业解决技术与商业双重难题
  15. 立足小餐饮,“新名酒”江小白能走多远?
  16. Redis 分布式锁笔记
  17. 奥运18日看点:乒球体操优势明显 蹦床力争金牌突破
  18. 配置Mac 习惯使用环境
  19. python 函数的使用
  20. 笔记本无线网卡设置!

热门文章

  1. POJ1734(floyd求最小环的路径)
  2. cocos2d-x初探学习笔记(1)--HelloWorld
  3. 软件开发提效哪有那么容易,都是坑啊~
  4. Easy Tech:什么是MPEG-DASH协议
  5. 北京冬奥黑科技; 揭秘虎年春晚硬核科技;全球首款AR隐形眼镜问世;索尼3D显示技术路径曝光...
  6. 畅享音视频技术饕餮盛宴,就在LiveVideoStackCon 上海站
  7. 2019 VOD编码工具指南
  8. 梁俊斌:音频技术可以延展众多应用场景
  9. LeetCode——树:BST
  10. Java多线程之线程池的手写改造和拒绝策略