题目:
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为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) {
int len=array.length;
if(len<1){
return 0;
}
int count=0;
Arrays.sort(array);
int num=array[len/2];
for(int i=0;i<len;i++){
if(num==array[i])
count++;
}
if(count<=(len/2)){
num=0;
}
return num;
}
}
import java.util.HashMap;
import java.util.Map;
public class Solution {
public int MoreThanHalfNum_Solution(int [] array) {
if(array.length==0){
return 0;
}
Map<Integer,Integer> map = new HashMap<Integer, Integer>();
int key;
int value=1;
int i;
int length = array.length%2==0?array.length/2:array.length/2+1;
for (i = 0;i<length;i++){
key = array[i];
if(map.containsKey(key)){
value=map.get(key)+1;
map.put(key,value);
}else {
map.put(key,value);
}
}
for (i = length-1;i<array.length;i++){
key = array[i];
if (map.containsKey(key)){
value =map.get(key)+1;
if (value>=length){
return key;
}else {
map.put(key,value);
}
}
}
return 0;
}
}
public class Solution{
public int MoreThanHalfNum_Solution(int [] array){
int count=0;
int temp=0;
for(int i=0;i<array.length;i++){
if(temp==array[i])count++;
else if(count>0)count--;
else{
temp=array[i];
count=1;
}
}
count=0;
for(int i=0;i<array.length;i++){
if(temp==array[i])
count ++;
}
return count>array.length/2?temp:0;
}
}