给定一个未排序的整数数组,找到其中位数。
中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数。
样例
给出数组[4, 5, 1, 2, 3], 返回 3
给出数组[7, 9, 4, 5],返回 5
挑战
快排的时候可以改成这样
while(nums[j]>temp&&i<j)
{
j--;
}
while(nums[i]<=temp&&i<j)
{
i++;
}
时间复杂度为O(n)
代码如下
public class Solution {
/*
* @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
int left=0;
int right=nums.length-1;
int mid=(left+right)/2;
int num;
while(true){
num=quick_sort(nums,left,right);
if(num==mid)
break;
if(num<mid)
left=num+1;
if(num>mid)
right=num-1;
}
return nums[mid];
}
int quick_sort(int[] nums,int left,int right)
{
if(left>right)
{
return 0;
}
int i=left;
int j=right;
int temp=nums[left];
while(i!=j)
{
while(nums[j]>=temp&&i<j)
{
j--;
}
while(nums[i]<=temp&&i<j)
{
i++;
}
if(i<j)
{
int t=nums[j];
nums[j]=nums[i];
nums[i]=t;
}
}
nums[left]=nums[i];
nums[i]=temp;
return i;
}
}
快排的时候可以改成这样
while(nums[j]>temp&&i<j)
{
j--;
}
while(nums[i]<=temp&&i<j)
{
i++;
}