给定一个未排序的整数数组,找到其中位数。
中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数。
样例
给出数组[4, 5, 1, 2, 3], 返回 3
给出数组[7, 9, 4, 5],返回 5
挑战
时间复杂度为O(n)
public class Solution {
/**
* @param nums: A list of integers.
* @return: An integer denotes the middle number of the array.
*/
public static int median(int []nums){
if(nums.length==0)
return 0;
int start=0;
int end=nums.length-1;
int index=partition(nums, start, end);
if(nums.length%2==0){
while(index!=nums.length/2-1){
if(index>nums.length/2-1){
index=partition(nums, start, index-1);
}else{
index=partition(nums, index+1, end);
}
}
}else{
while(index!=nums.length/2){
if(index>nums.length/2){
index=partition(nums, start, index-1);
}else{
index=partition(nums, index+1, end);
}
}
}
return nums[index];
}
private static int partition(int nums[], int start, int end){
int left=start;
int right=end;
int pivot=nums[left];
while(left<right){
while(left<right&&nums[right]>=pivot){
right--;
}
if(left<right){
nums[left]=nums[right];
left++;
}
while(left<right&&nums[left]<=pivot){
left++;
}
if(left<right){
nums[right]=nums[left];
right--;
}
}
nums[left]=pivot;
return left;
}
}