算法笔记_131:出现次数超过一半的数(Java)
Posted 舞动的心
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法笔记_131:出现次数超过一半的数(Java)相关的知识,希望对你有一定的参考价值。
目录
1 问题描述
数组中有一个数出现的次数超过了数组长度的一半,请找出这个数。
2 解决方案
2.1 每次删除两个不同的数
具体代码如下:
package com.liuzhen.practice; public class Main { public int getResult(int[] A) { //找到两个不相等的元素,将这两个元素变为0 for(int start = 0, i = 1;i < A.length;i++) { while(A[start] == 0) { start++; } if(A[start] != A[i] && start < i) { A[start] = 0; A[i] = 0; start++; } } int result = 0; for(int i = 0;i < A.length;i++) { if(A[i] != 0) { result = A[i]; break; } } return result; } public static void main(String[] args) { Main test = new Main(); int[] A = {1,2,3,4,5,6,7,1,1,2,3,2,2,2,2,2}; System.out.println(test.getResult(A)); } }
运行结果:
2
2.2 记录两个值
具体代码如下:
package com.liuzhen.practice; public class Main1 { public int FindOneNumber(int[] A) { int result = A[0]; int count = 1; for(int i = 1;i < A.length;i++) { if(count == 0) { result = A[i]; count = 1; } else { if(A[i] == result) count++; else count--; } } return result; } public static void main(String[] args) { Main1 test = new Main1(); int[] A = {1,2,3,4,5,6,7,1,1,2,3,2,2,2,2,2}; System.out.println(test.FindOneNumber(A)); } }
运行结果:
2
参考资料:
1.《编程之法面试和算法心得》 July 著
以上是关于算法笔记_131:出现次数超过一半的数(Java)的主要内容,如果未能解决你的问题,请参考以下文章
数组中有一个数字出现次数超过数组长度一半,找出这个数字(用C语言解决)。要求时间复杂度尽量小。