题解 | #数组中出现次数超过一半的数字#

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

https://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163

2022.0808算法第17题数组中出现次数超过一半的数字
这道题有多种解法,哈希表法、排序法、BM投票法等
哈希表法记录每个元素出现的次数,最后找出次数大于size/2的元素
排序法直接选择排序后中间位置的数字即可
BM投票法是将相邻两个元素判断是否相等,如果相等则计数+1,否则计数-1;
当计数==0时,更新候选元素,
这样在最后剩下的候选元素就是次数超过一半的数字;
首先定义候选元素,并计数
int cand=numbers[0];
int count=1;
然后遍历数组,更新计数和候选元素
for(int i=1;i<numbers.size();i++){
    if(cand==numbers[i])
        count++;
    else
        count--;
    if(count==0){
        cand=numbers[i];
        count=1;
    }                            
}



#算法题#
全部评论

相关推荐

这是什么操作什么意思,这公司我服了...
斯派克spark:意思是有比你更便宜的牛马了
点赞 评论 收藏
分享
06-07 19:59
门头沟学院 C++
补药卡我啊😭:都快15年前的了还在11新特性
你的简历改到第几版了
点赞 评论 收藏
分享
MinJerous:虽然我一直说 计算机不怎么卡学历 但是至少得一本
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-11 11:29
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务