求中位数
给定一个未排序的整数数组,找到其中位数。中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数。
public class Solution {
/**
* @author WildCat
* @param nums: A list of integers
* @return: An integer denotes the middle number of the array
*/
public int median(int[] nums) {
// write your code here
// Please note: the `k` must be (nums.length + 1) / 2 - 1 in order to satisfy the requirement
return partition(nums, 0, nums.length - 1, nums.length/2);
}
// Same to find kth smallest element in an array
// Modified for the partition function of quicksort
private int partition(int[] nums, int left, int right, int k) {
if (left == right) {
return nums[k];
}
int start = left;
int end = right;
int pivot = nums[(end - start) / 2 + start];
while (start <= end) {
while (nums[start] < pivot && start <= end) {
start++;
}
while (nums[end] > pivot && start <= end) {
end--;
}
if (start <= end) {
int temp = nums[start];
nums[start] = nums[end];
nums[end] = temp;
start++;
end--;
}
}
if (k <= end) {
return partition(nums, left, end, k);
} else if (k >= start) {
return partition(nums, start, right, k);
}
return nums[k];
}
}