剑指offer--数组中出现次数超过一半的数
来源:互联网 发布:设备管理器中没有端口 编辑:程序博客网 时间:2024/05/16 09:26
题目描述
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
思路:采用阵地攻守的思想: 第一个数字作为第一个士兵,守阵地;count = 1; 遇到相同元素,count++; 遇到不相同元素,即为敌人,同归于尽,count--;当遇到count为0的情况,又以新的i值作为守阵地的士兵,继续下去,到最后还留在阵地上的士兵,有可能是主元素。 再加一次循环,记录这个士兵的个数看是否大于数组一般即可。
public class Solution { public int MoreThanHalfNum_Solution(int [] array) { if (array==null||array.length==0) {return 0;} if (array.length==1&&array[0]==1) {return 1;//我也不知道为什么输入为1的时候,输出要为1;。。不然通过不了} int a = array[0]; int count = 1; for (int i = 1; i < array.length; i++) {if (count==0) {a = array[i];}else {if (a==array[i]) {count++;}else {count--;}}} count = 0; for (int i = 0; i < array.length; i++) {if (a==array[i]) {count++;}} if (count*2>array.length) {return 2;}else {return 0;} }}
阅读全文
0 0
- 剑指offer--数组中出现次数超过一半的数
- 剑指offer 数组中出现次数超过一半的数
- 剑指offer--数组中出现次数超过一半的数字
- 《剑指offer》数组中出现次数超过一半的数字
- 剑指offer:数组中出现次数超过一半的数字
- 【剑指Offer】数组中出现次数超过一半的数字
- 剑指offer:数组中出现次数超过一半的数字
- 数组中出现次数超过一半的数字||剑指offer
- 剑指offer 数组中出现次数超过一半的数字
- 剑指offer:数组中出现次数超过一半的数字
- [剑指offer]数组中出现次数超过一半的数字
- 《剑指offer》-数组中出现次数超过一半的数字
- 剑指offer|数组中出现次数超过一半的数字
- 剑指offer-数组中出现次数超过一半的数字
- 《剑指offer》数组中出现次数超过一半的数字
- 剑指offer - 数组中出现次数超过一半的数字
- 剑指Offer:数组中出现次数超过一半的数字
- 剑指offer-数组中出现次数超过一半的数字
- springMVC对静态资源访问的处理
- DockerXScan——Docker镜像漏洞扫描器
- 命名空间namespace小结
- JVM高级特性与实践(三):垃圾收集算法 与 垃圾收集器实现
- 面向对象3---static,制作帮助文档,代码块
- 剑指offer--数组中出现次数超过一半的数
- Hadoop好友推荐系统-执行聚类算法
- 基于swpiper的资讯滚动走马灯做法
- Java JVM 工作原理详解
- 算法系列——Two Sum II
- MySQL5.7 添加用户、删除用户与授权
- Qt之正则表达式
- Java从入门到高手到放弃
- POJ 1637 浅谈混合图欧拉回路网络流建模