Median

来源:互联网 发布:淘宝商城公主裙 编辑:程序博客网 时间:2024/04/27 10:37

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.

java

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 -1;        }        if (nums.length == 1) {            return nums[0];        }        return util(nums, 0, nums.length - 1, (nums.length - 1) / 2);    }    private int util(int[] nums, int start, int end, int k) {        if (start > end) {            return -1;        }        int left = start;        int right = end;        int pivot = nums[(left + right) / 2];        while (left <= right) {            while (left <= right && nums[left] < pivot) {                left++;            }            while (left <= right & nums[right] > pivot) {                right--;            }            if (left <= right) {                int temp = nums[left];                nums[left] = nums[right];                nums[right] = temp;                left++;                right--;            }        }        if (k <= right) {            return util(nums, start, right, k);        } else if (k >= left) {            return util(nums, left, end, k);        } else {            return nums[k];        }    }}


python

class Solution:    """    @param: nums: A list of integers    @return: An integer denotes the middle number of the array    """    def median(self, nums):        # write your code here        if nums == None or len(nums) == 0:            return -1        return self.quickSelect(nums, 0, len(nums) - 1, (len(nums) - 1) / 2)            def quickSelect(self, nums, start, end, k):        if start > end:            return -1        left, right = start, end        pivot = nums[(left + right) / 2]        while left <= right:            while left <= right and nums[left] < pivot:                left += 1            while left <= right and nums[right] > pivot:                right -= 1            if left <= right:                nums[left], nums[right] = nums[right], nums[left]                left += 1                right -= 1        if k <= right:            return self.quickSelect(nums, start, right, k)        elif k >= left:            return self.quickSelect(nums, left, end, k)        else:            return nums[k]