题目描述
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
方法一:上来第一感觉,直接嵌套遍历不就出来了吗!暴力!
import java.util.*;
public class Solution {
public int MoreThanHalfNum_Solution(int [] array) {
for(int i = 0;i<array.length;i++){
int result = isMoreTanH(array,i);
if(result!=0){
return result;
}
}
return 0;
}
public int isMoreTanH(int [] array,int index){
int indexs=0;
for(int i =0;i<array.length;i++){
if(array[index]==array[i]){
indexs++;
}
}
return indexs>array.length/2? array[index]:0;
}
}
方法二:另一种思路,如果如果数字在数组中大于一般以上那么不管在数组中怎么排布,他最后出现次数的累加减去与它不同的元素个数的累计值,差值是肯定大于0的;
public class Solution {
public int MoreThanHalfNum_Solution(int [] array) {
if(array==null||array.length<=0)return 0;
int preItem = array[0];
int count = 1;
for(int i = 0;i<array.length;i++){
if(preItem==array[i]){
count++;
}else{
count--;
if(count==0){
preItem = array[i];
count=1;
}
}
}
int temCount = 0;
for(int i = 0;i<array.length;i++){
if(preItem==array[i]){
temCount++;
}
}
return temCount>array.length/2?preItem:0;
}
}