Day11-寻找中位数

题目

给定两个有序数组,寻找数组的中位数,要求时间复杂度为O(log(m+n))

解决思路如下:

创建一个数组存放合并后的数组nums,利用归并排序的思想,将两个数组依次加入合并后的数组,当个数为奇数个时,中位数为第nums/2个,偶数时为第nums和nums-1两数的平均值

class Solution {
   public double findMedianSortedArrays(int[] nums1, int[] nums2) {
    int[] nums;
    int m = nums1.length;
    int n = nums2.length;
    nums = new int[m + n];
    if (m == 0) {
        if (n % 2 == 0) {
            return (nums2[n / 2 - 1] + nums2[n / 2]) / 2.0;
        } else {

            return nums2[n / 2];
        }
    }
    if (n == 0) {
        if (m % 2 == 0) {
            return (nums1[m / 2 - 1] + nums1[m / 2]) / 2.0;
        } else {
            return nums1[m / 2];
        }
    }

    int count = 0;
    int i = 0, j = 0;
    while (count != (m + n)) {
        if (i == m) {
            while (j != n) {
                nums[count++] = nums2[j++];
            }
            break;
        }
        if (j == n) {
            while (i != m) {
                nums[count++] = nums1[i++];
            }
            break;
        }

        if (nums1[i] < nums2[j]) {
            nums[count++] = nums1[i++];
        } else {
            nums[count++] = nums2[j++];
        }
    }

    if (count % 2 == 0) {
        return (nums[count / 2 - 1] + nums[count / 2]) / 2.0;
    } else {
        return nums[count / 2];
    }
}

}

以上为基础解法,时间复杂度不满足题目要求,题目要求时间复杂度为O(log(m+n)),应该利用二分查找的思想
原作者链接

上一篇:LeetCode88. 合并两个有序数组


下一篇:数组06 两个数组的交集2