欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

4. 寻找两个正序数组的中位数

程序员文章站 2022-07-14 14:34:58
...

给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数。

进阶:你能设计一个时间复杂度为 O(log (m+n)) 的算法解决此问题吗?

思路:已知数组的长度 使用双指针O(m+n)

class Solution {
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        // 两数组总长
        int len = nums1.length+nums2.length;
        //中间值的索引
        int midindex = len/2;
        //定义两个变量进行迭代,总长为奇数,中位数为mid2,总长为偶数,中位数为mid1和mid2的平均值
        int mid1 = 0, mid2 = 0;
        // 定义两个指针分别作为两个数据的索引
        int i1 = 0, i2 = 0;
        while(true){
            if(i1+i2 == midindex + 1) break;
            //依次迭代
            mid1 = mid2;
            // 当某个指针已经到达边界,只迭代另一个指针
            if(i1 == nums1.length){mid2 = nums2[i2++];continue;}
            if(i2 == nums2.length){mid2 = nums1[i1++];continue;}
            //两个指针都到达边界,比价大小按顺序取值
            mid2 = nums1[i1] < nums2[i2] ? nums1[i1++]:nums2[i2++];
        }
        return len % 2 == 0? (mid1+mid2)/2.0 : mid2;
    }
}

划分数组
中位数的定义:将一个集合划分为两个长度相等的子集,其中一个子集中的元素总是大于另一个子集中的元素。

相关标签: LeetCode Hot100