lc88
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int i = m - 1, j = n - 1;
int p = m + n - 1;
while(i >= 0 && j >= 0){
nums1[p--] = nums1[i] > nums2[j] ? nums1[i--] : nums2[j--];
}
if(j >= 0){
for (int k = j; k >= 0; k--){
nums1[k] = nums2[k];
}
}
}
}
思路:因为题目返回的是num1,先将两个指针分别指向m-1
,n-1
,再比较之,然后大的放到num1后面,如果有一个数组遍历完了,查看num2是否已经遍历完,如果还未遍历完,将它加到num1前面相应的位置(因为此时num2中的元素都是最小且有序的)。