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