博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指Offer——数组中出现次数超过一半的数字
阅读量:4691 次
发布时间:2019-06-09

本文共 984 字,大约阅读时间需要 3 分钟。

题目描述:

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。

分析:

 主元素问题。只要每次都从数组中移除两个不相同的数值,

如果有出现的次数超过数组长度的一半的数,那么就是最后剩下来的那个。

最后再检验一次是否有这样的数。

代码:

1 class Solution { 2 public: 3     int MoreThanHalfNum_Solution(vector
numbers) { 4 // 从数组中移除两个不相同的数值,如果有出现的次数超过数组长度的一半的数,那么就是最后剩下来的那个 5 int numSize = numbers.size(); 6 int candidate = 0; // 候选数,可能是出现的次数超过数组长度的一半的数 7 int cnt = 0; // 标记当前的候选数没被抵消的次数 8 for(int i = 0; i < numSize; i++) { 9 if(cnt == 0) candidate = numbers[i]; // 重选候选数10 if(candidate == numbers[i]) cnt++; // 次数加111 else cnt--; // 次数减112 }13 cnt = 0;14 for(int i = 0; i < numSize; i++) // 检验15 if(numbers[i] == candidate)16 cnt++;17 if(cnt * 2 <= numSize) return 0;18 return candidate;19 }20 };

 

转载于:https://www.cnblogs.com/jacen789/p/7747651.html

你可能感兴趣的文章
android多层树形结构列表学习笔记
查看>>
Android_去掉EditText控件周围橙色高亮区域
查看>>
《构建之法》第一、二、十六章阅读笔记
查看>>
arrow:让Python的日期与时间变的更好
查看>>
(转)Excel的 OleDb 连接串的格式(连接Excel 2003-2013)
查看>>
Java并发编程
查看>>
Git Stash用法
查看>>
sql server 2008学习8 sql server存储和索引结构
查看>>
Jquery radio选中
查看>>
postgressql数据库中limit offset使用
查看>>
测试思想-集成测试 关于接口测试 Part 2
查看>>
windows下mysql密码忘了怎么办?【转】
查看>>
php生成器使用总结
查看>>
T-SQL中的indexof函数
查看>>
javascript基础之数组(Array)对象
查看>>
mysql DML DDL DCL
查看>>
RAMPS1.4 3d打印控制板接线与测试1
查看>>
python with语句中的变量有作用域吗?
查看>>
24@Servlet_day03
查看>>
初级ant的学习
查看>>