您的位置:首页 > 其它

找中位数O(n)算法

2015-07-21 10:09 267 查看

题目描述:

给定一个未排序的整数数组,找到其中位数。

中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数。

样例

给出数组[4, 5, 1, 2, 3], 返回 3

给出数组[7, 9, 4, 5],返回 5

解题思路:

利用快排划分的思想,递归处理。

参考代码:

<span style="font-size:18px;">public class Solution {

public int median(int[] nums) {
return sub(nums, 0, nums.length - 1, (nums.length + 1) / 2);
}
private int sub(int[] nums, int start, int end, int size) {
int mid = (start + end) / 2;
int pivot = nums[mid];
int i = start - 1, j = end + 1;
for (int k = start; k < j; k++) {
if (nums[k] < pivot) {
i++;
int tmp = nums[i];
nums[i] = nums[k];
nums[k] = tmp;
}
else if (nums[k] > pivot) {
j--;
int tmp = nums[j];
nums[j] = nums[k];
nums[k] = tmp;
k--;
}
}
if (i - start + 1 >= size) {
return sub(nums, start, i, size);
}
else if (j - start >= size) {
return nums[j - 1];
}
else {
return sub(nums, j, end, size - (j - start));
}
}
}</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: