中位数

作者: cuzz_ | 来源:发表于2018-04-04 18:55 被阅读0次

给定一个未排序的整数数组,找到其中位数。
中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数。

样例
给出数组[4, 5, 1, 2, 3], 返回 3
给出数组[7, 9, 4, 5],返回 5

快速排序的思想,我只需要排一边就可以,可以接近O(n)的复杂度。

public class Solution080 {
    /**
     * @param nums: A list of integers
     * @return: An integer denotes the middle number of the array
     */
    public static void main(String[] args) {
        int[] nums = {4,5,1,2,3,3};
        int result = median(nums);
        System.out.println(result);
    }
    public static int median(int[] nums) {
        if (nums.length == 1){
            return nums[0];
        }
        return sub(nums, 0, nums.length-1, (nums.length-1)/2);
    }
    
    private static int sub(int[] nums, int start, int end, int size) {
        int p = partition(nums, start, end);
        if (p == size) {
            return nums[p];
        }else if (p > size){
            return sub(nums, start, p - 1, size);
        }else{
            return sub(nums, p + 1, end, size);
        }
    }

    private static int partition(int[] nums, int start, int end) {
        int pivot = nums[end];
        int j = start;
        for (int i = start; i < end; i++) {
            if (nums[i] < pivot) {
                exch(nums, i, j);
                j++;
            }
        }
        exch(nums, j, end);
        return j-1;
    }

    private static void exch(int[] nums, int i, int j) {
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp; 
    }
}

相关文章

  • 中位数的近似计算

    的公式求出中位数所在组的位置,然后再按下限公式或上限公式确定中位数。 Me——中位数;L——中位数所在组下限;U—...

  • 二分查找类题目小结

    问题的关键所在 两个中位数 区间选择 终止条件 两个中位数 下位中位数 上位中位数 区间的选择 开区间 闭区间 半...

  • LeetCode之Minimum Moves to Equal

    问题: 方法:首先,数学上中位数就存在距离和最小的特点,所以找出中位数然后遍历所有元素和中位数的距离和即得到最终结...

  • 295. 数据流的中位数

    中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。 例如, [2,3,4] 的中位数是 ...

  • 带权中位数

    带权中位数

  • Wiggle Sort II

    题目来源这道题的解法,我看了老半天,然后还是有点懵逼,先找中位数,然后比中位数大的和比中位数小的划分为两块,交换位...

  • 4. Median of Two Sorted Arrays

    中位数的定义:如果某个有序数组长度是奇数,那么中位数就是最中间的那个数;如果是偶数,那么中位数就是最中间两个数字的...

  • Java基本算法——二分查找算法

    二分查找算法 每次查找取数组中位数的值进行比较,如果目标值值大于中位数的值,则截取中位数右侧的数组再次进行二分查找...

  • [牛客]数据流中的中位数

    [牛客]数据流中的中位数 题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有...

  • JZ-063-数据流中的中位数

    数据流中的中位数 题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序...

网友评论

      本文标题:中位数

      本文链接:https://www.haomeiwen.com/subject/ozflhftx.html