题意以及限制条件
-
题目:
-
限制条件:
想到的所有可能解法
-
Ways_1——Two Pointers(From end to start)
- 时间复杂度——O(n);空间复杂度——O(1)。
-
Ways_2——Two Pointers(From start to end)
- 时间复杂度——O(n);空间复杂度——O(m + n)。
对应的代码
- Ways_1
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int len1 = m - 1;
int len2 = n - 1;
int len = m + n - 1;
while (len1 >= 0 && len2 >= 0) {
nums1[len--] = nums1[len1] > nums2[len2] ? nums1[len1--] : nums2[len2--];
}
System.arraycopy(nums2, 0, nums1, 0, len2 + 1);
}
}
- Ways_2
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int[] nums1_copy = new int[m];
System.arraycopy(nums1, 0, nums1_copy, 0, m);
int p1 = 0, p2 = 0;
int p = 0;
while (p1 < m && p2 < n)
nums1[p++] = nums1_copy[p1] < nums2[p2] ? nums1_copy[p1++] : nums2[p2++];
if (p1 < m)
System.arraycopy(nums1_copy, p1, nums1, p1 + p2, m + n - p1 - p2);
if (p2 < n)
System.arraycopy(nums2, p2, nums1, p1 + p2, m + n - p1 - p2);
}
}