Given a unsorted array with integers, find the median of it.
A median is the middle number of the array after it is sorted.
If there are even numbers in the array, return the N/2
-th number after sorted.
Given [4, 5, 1, 2, 3]
, return 3
.
Given [7, 9, 4, 5]
, return 5
.
用quick select的方法直接找到第N/2个元素
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 == null || nums.length == 0) return 0; int length = nums.length; return quickSelect(nums, 0, length - 1, (length - 1) / 2); } public int quickSelect(int[] nums, int start, int end, int k){ int left = start; int right = end; int pivot = end; while(true){ while(left < right && nums[left] < nums[pivot]) left++; while(left < right && nums[right] >= nums[pivot]) right--; if(left == right) break; else swap(nums, left, right); } swap(nums, left, pivot); if(left == k) return nums[left]; else if(left < k) return quickSelect(nums, left + 1, end, k); else return quickSelect(nums, start, left - 1, k); } public void swap(int[]nums, int i, int j){ int temp = nums[i]; nums[i] = nums[j]; nums[j] = temp; return; } }