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

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

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;
    }                            
}



#算法题#
全部评论

相关推荐

不愿透露姓名的神秘牛友
10-04 05:12
瑞雪兆丰年_:可以贴个超级大的校徽,以防HR眼拙
点赞 评论 收藏
分享
10-25 22:20
门头沟学院 Java
代码飞升:同学院本,个人亮点去了,打招呼里面的废话也去了,学院本就是路边一条,明天拉满然后该学还是学,小厂也行尽量先有一段实习。另外你的项目描述写的不好,具体列一下可被提问的点,然后量化一下指标或者收益吧
投了多少份简历才上岸
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

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