//方案一java
import java.util.*;code
public class Solution {get
public int MoreThanHalfNum_Solution(int [] array) { int len=array.length; HashMap<Integer,Integer> hash = new HashMap<Integer,Integer>(); for(int i=0;i<len;i++){ if(!hash.containsKey(array[i])) hash.put(array[i],1); else hash.put(array[i], hash.get(array[i]) + 1); if(hash.get(array[i])*2>len) return array[i]; } return 0; }
}input
//方案二 網友稱爲分形葉的思想hash
import java.util.*;io
public class Solution { public int MoreThanHalfNum_Solution(int [] array) {class
int len=array.length; int result = array[0]; int time=1; for(int i=1;i<len;i++) { if(time==0){ time=1; result=array[i]; }else if(result==array[i]) time++; else time--; } int sum=0; for(int i=0;i<len;i++) if(array[i]==result) sum++; if(sum*2>len) return result; else return 0; }
}import
//方案三:im
import java.util.*;while
public class Solution {
public int MoreThanHalfNum_Solution(int [] array) { int len=array.length; int mid=len/2; int start=0; int end=len-1; int index = f(array,start,end); while(index!=mid){ if(index>mid) index=f(array,start,index-1); else index=f(array,index+1,end); } int result=array[mid]; int sum=0; for(int i=0;i<len;i++) if(result==array[i]) sum++; return sum*2>len?result:0; } public int f(int input[],int begin,int end){ int low = begin; int high = end; int pivot = input[low]; while (low < high) { while (low < high&&pivot <= input[high]) high--; input[low] = input[high]; while (low < high&&pivot >= input[low]) low++; input[high] = input[low]; } input[low] = pivot; return low; }
}
推薦方案二,方案其實不好,可是提供了一個球第k大數的思路