中位数

作者: Ermengarde | 来源:发表于2019-07-24 10:22 被阅读0次

给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 。

请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log (m+n)) 。

示例 1:

nums1 = [1, 3]

nums2 = [2]

中位数是 2.0

示例 2:

nums1 = [1, 2]

nums2 = [3, 4]

中位数是 (2 + 3)/2 = 2.5

/**

* Median of Two Sorted Arrays

* 两个排序数组的中位数

*/

class Solution {

    public double findMedianSortedArrays(int[] A, int[] B) {

        int m = A.length;

        int n = B.length;

        if (m > n) { // to ensure m<=n

            int[] temp = A; A = B; B = temp;

            int tmp = m; m = n; n = tmp;

        }

        int iMin = 0, iMax = m, halfLen = (m + n + 1) / 2;

        while (iMin <= iMax) {

            int i = (iMin + iMax) / 2;

            int j = halfLen - i;

            if (i < iMax && B[j-1] > A[i]){

                iMin = iMin + 1; // i is too small

            }

            else if (i > iMin && A[i-1] > B[j]) {

                iMax = iMax - 1; // i is too big

            }

            else { // i is perfect

                int maxLeft = 0;

                if (i == 0) { maxLeft = B[j-1]; }

                else if (j == 0) { maxLeft = A[i-1]; }

                else { maxLeft = Math.max(A[i-1], B[j-1]); }

                if ( (m + n) % 2 == 1 ) { return maxLeft; }

                int minRight = 0;

                if (i == m) { minRight = B[j]; }

                else if (j == n) { minRight = A[i]; }

                else { minRight = Math.min(B[j], A[i]); }

                return (maxLeft + minRight) / 2.0;

            }

        }

        return 0.0;

    }

}

相关文章

  • 中位数的近似计算

    的公式求出中位数所在组的位置,然后再按下限公式或上限公式确定中位数。 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/gxvtrctx.html