给定一个未排序的整数数组,找到其中位数。
中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数。
您在真实的面试中是否遇到过这个题?
Yes
哪家公司问你的这个题?
Airbnb Alibaba Amazon Apple Baidu Bloomberg Cisco Dropbox Ebay Facebook Google Hulu Intel Linkedin Microsoft NetEase Nvidia Oracle Pinterest Snapchat Tencent Twitter Uber Xiaomi Yahoo Yelp Zenefits
感谢您的反馈
样例
给出数组[4, 5, 1, 2, 3], 返回 3
给出数组[7, 9, 4, 5],返回 5
挑战
标签
Expand
时间复杂度为O(n)
相关题目 Expand
- 3 (lintcode-copyright),(heap),(priority-queue) 困难 中位数 II 24 % 3 (sorted-array),(divide-and-conquer),(array) 困难 两个排序数组的中位数 20 %
-
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
if(nums.length==1){
return nums[0];
}
nums = quicksort(nums, 0, nums.length-1);
if(nums.length%2==0){
return nums[nums.length/2-1];
}
return nums[nums.length/2];
}
public static int[] quicksort(int[] array,int l,int h){
int low = l+1;
int high = h;
if(low>high) return null ;
int key = array[l];
while(true){
while(low<high&&array[low]<key){
low++;
}
while(array[high]>key){
high--;
}
if(low>=high) break;
//交换2者的值
int temp = array[low];
array[low] = array[high];
array[high] = temp;
if(array[low]==key){
high--;
}else{
low++;
}
}
array[l] = array[high];
array[high] = key;
if(l<high-1) quicksort(array, l, high-1);
if(h>high+1) quicksort(array, high+1,h );
return array;
}
}