数组中出现次数超过一半数字.pdfVIP

  • 3
  • 0
  • 约小于1千字
  • 约 2页
  • 2026-06-23 发布于北京
  • 举报

数组中出现次数超过一半的数字_

题目描述

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组

{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则

输出0。

方法一:(剑指思想)

采用阵地攻守的思想:时间复杂度是O(n)

1)第一个数字作为第一个士兵,守阵地;count=1;

2)遇到相同元素,count++;

遇到不相同元素,即为敌人,同归于尽,count–;

3)当遇到count为0的情况,又以新的i值作为守阵地的士兵,继续下去,到最后还留在阵地上的士兵,

有可能是主元素。

4)再加一次循环,记录这个士兵的个数看是否大于数组一般即可。(排除123这种特殊情况)

//剑指思想

//两个抵消,剩下出现次数最多的那个数res,但是res出现的次数不一定能够大于数组长度的一

//令count=1,而不是0,这个地方错了

count++;

if(count==0){

res=array[i];

//验证次数是否大于数组长度一半

方法二:(我的方

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档