LeetCode题解【题4】求两个有序数组的中位数

原题链接:https://leetcode-cn.com/problems/median-of-two-sorted-arrays/

执行用时 :2 ms, 在所有 Java 提交中击败了100.00%的用户内存消耗 :42.5 MB, 在所有 Java 提交中击败了96.25%的用户

归并排序法
既然题中给出的是两个有序数组,则最适合归并法解决,并且不需要额外的分治归并,一次就能搞定。
1、初始化一个数组为两个输入数组的合并数组,数组大小是两个数组大小的和sumLength = leftArrLength + rightArrLength。
2、对需合并的数组插入元素,插入元素的顺序是从两个数组中从小到大选取。
3、设l是左数组的选择下标,r是右数组的选择下标,index是合并数组的插入位置下标。通过一个while循环对两个数组的元素进行比较进行插入。
4、当其中一个数组遍历完成后,因为另一个数组是有序数列,所以直接插入到合并数组中。
5、选择中间数,若合并数组长度为奇数,则中间数的下标就是int mid = sumLength/2,这里不是四舍五入,比如7/2 = 3;若合并数组长度为偶数,则中间数是合并数组中间两个数的和除以2,result = (double)(sumArr[mid-1]+sumArr[mid])/2,注意是double型计算,需要对计算过程进行double转换,不然默认int。
详细过程对照代码,不清楚可以先了解归并排序。

class Solution {
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        int leftArrLength = nums1.length;
        int rightArrLength = nums2.length;
        int sumLength = leftArrLength + rightArrLength;
        int[] sumArr = new int[sumLength];
        int l=0,r=0,index = 0;
        while (l< leftArrLength && r< rightArrLength){
            if (nums1[l]<=nums2[r]){
                sumArr[index] = nums1[l];
                index++;
                l++;
            }else {
                sumArr[index] = nums2[r];
                index++;
                r++;
            }
        }
        while (l 
 

  

你可能感兴趣的:(LeetCode题解【题4】求两个有序数组的中位数)