时间复杂度为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(==0)
return 0;
int start=0;
int end=-1;
int index=partition(nums, start, end);
if(%2==0){
while(index!=/2-1){
if(index>/2-1){
index=partition(nums, start, index-1);
}else{
index=partition(nums, index+1, end);
}
}
}else{
while(index!=/2){
if(index>/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;
}
}