找出数组中出现次数超过数组长度一半(>=1/2 >1/3)的那个数

这篇博客介绍了如何找出数组中出现次数超过数组长度一半或超过1/3的数字。算法通过维护当前认为的目标数字及其连续出现次数,遍历数组并更新状态。在大于1/2的情况下,算法保证了每次跳过不匹配的数字后,剩余部分仍满足条件。对于大于1/3的情况,类似地处理两个潜在的数字,最终通过遍历数组确认哪个超过1/3。
摘要由CSDN通过智能技术生成

先讨论超过数组长度一半的情况

超过数组长度一半意味着这个数字的个数大于其他全部数字个数之和,算法大致为,首先设置两个参数currentAxis,currentNum。参数currentAxis用来记录当前认为是我们要找的那个数字,参数currentNum用来记录CurrentAxis参数对应的那个数字连续出现的次数。步骤如下:

(1)初始化:设当前的数组为data[],数组的长度为n。currentAxis=data[0],currentNum=1;

(2)设i=1,遍历数组,转向(3);

(3)当data[i]==currentAxis时,currentNum++,转向(5);否则转向(4);

(4)currentNum--,当CurrentNum==0时,currentAxis=data[i];

(5)当i==data.length时,转向(6);否则,i+

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值