88. Merge Sorted Array

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int k = m + n - 1;
        int i = m - 1;
        int j = n - 1;

        while (i >= 0 && j >= 0) {
            if (nums1[i] > nums2[j]) {
                nums1[k--] = nums1[i--];
            } else {
                nums1[k--] = nums2[j--];
            }
        }
        while (j >= 0) {
            nums1[k--] = nums2[j--];
        }
    }
}

4. Median of Two Sorted Arrays

naive的做法是直接排个序,然后返回就行了。这样的时间复杂度是O(m + n)。很容易。

class Solution {
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        int[] a = merge(nums1, nums2);

        if (a.length % 2 == 1) {
            return a[a.length / 2];
        } else {
            double first = a[a.length / 2];
            double second = a[a.length / 2 - 1];
            return (first + second) / 2;
        }
    }
    private int[] merge(int[] nums1, int[] nums2) {
        int m = nums1.length;
        int n = nums2.length;

        int[] result = new int[m + n];

        int k = m + n - 1;
        int i = m - 1;
        int j = n - 1;

        while (i >= 0 && j >= 0) {
            if (nums1[i] > nums2[j]) {
                result[k--] = nums1[i--];
            } else {
                result[k--] = nums2[j--];
            }
        }
        while (i >= 0) {
            result[k--] = nums1[i--];
        }
        while (j >= 0) {
            result[k--] = nums2[j--];
        }
        return result;
    }
}

但这题之所以是Hard,就是因为时间复杂度要求是O(log (m+n))。

```java

results matching ""

    No results matching ""