88. Merge Sorted Array
这个题也挺好的。。
三刷感觉很多E的题都非常值得再考虑。
比如这个,虽然题上没说,但是肯定是不能用extra space,估计二刷一刷重新建了ARRAY之类的。。
倒着来就行,利用M和N的已知。
public class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
// 1 2 3 4 9 15 20 30
// 6 8
if (nums2.length == 0) return;
int i = m - 1;
int j = n - 1;
while (j >= 0 || i >= 0) {
if (i >= 0 && j >= 0) {
if (nums1[i] > nums2[j]) nums1[i + j + 1] = nums1[i--];
else nums1[i + j + 1] = nums2[j--];
}
else if (i < 0) {
nums1[i + j + 1] = nums2[j--];
}
else break;
}
return;
}
}
回头看二刷的做法,他妈的。。瞬间打脸。。。。。。。。。。。
二刷的我简直是个天才。当时怎么做出来的。。
public class Solution
{
public void merge(int[] nums1, int m, int[] nums2, int n)
{
int a = m-1;
int b = n-1;
int c = m+n-1;
while(a >= 0 && b >=0)
{
nums1[c--] = nums1[a] > nums2[b] ? nums1[a--]:nums2[b--];
}
while(b >= 0) nums1[c--] = nums2[b--];
}
}

浙公网安备 33010602011771号