public class Solution29 {
public static void main(String[] args) {
Solution29 solution= new Solution29();
int []array = {2,2,2,2,3,3,3,3,3};
System.out.println(solution.solution2(array));
}
public int solution1(int [] arr){//解法一,找数组中位数的过程,因为元素大于一半一定会在中间位置
//没做错误处理
// 会导致原来的数组顺序变化
int mid = arr.length>>1;
int index = partition(arr, 0, arr.length-1);
while(index!=mid){
if(index >mid ){//中间数在左面
index = partition(arr, 0, index-1);
}
if(index < mid ){//中间数在左面
index = partition(arr, index+1, arr.length-1);
}
}
return arr[mid];
}
public int solution2(int []arr){
if(arr==null||arr.length==0) throw new IllegalArgumentException("数组不能为空");
int count=1,result=arr[0];
for (int i = 1; i < arr.length; i++) {
if(count==0){
result=arr[i];
count=1;
}else if(arr[i]!= result){
count--;
}else{
count++;
}
System.out.println("count"+count +" result"+result);
}
return result;
}
private int partition(int []arr,final int left,final int right){
if(arr==null||arr.length==0)return -1;
int l=left,r =right-1;//最后一位当 pviot
int pviot = arr[right];
while(true){
while(l<right&&l++<pviot){
}
while(r>=left&&r-->pviot){
}
if(l<r){
int temp = arr[l];
arr[l]=arr[r];
arr[r]=temp;
}else{
break;
}
}
arr[right]=arr[l];
arr[l]=pviot;
return l;
}
}
08-13
08-13