您的位置:首页 > 编程语言 > Java开发

算法笔记_131:出现次数超过一半的数(Java)

2017-04-16 19:48 309 查看

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


[b]运行结果:[/b]

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


[b]运行结果:[/b]

2


[b]参考资料:[/b]

1.《编程之法面试和算法心得》 July 著
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐