class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
for(int i = m-1,k = m+n-1, j = n-1; j >= 0;){
//一定要加边界判断
if(i>=0 && nums1[i] > nums2[j]){
nums1[k] = nums1[i];
i--;
}else{
nums1[k] = nums2[j];
j--;
}
k--;
}
}
}
这题本身不难,有趣的是第一个数组实际长度是合并后的数组长度,想优化空间复杂度的话需要从后向前比较。
自己没看清题目,以为m是数组总长度,结果是第一个数组的长度。
有一个较坑的点就是边界一定要注意加上判断,若第一个数组为空就踩坑了!