注意 : 在思考时, 先实现主体思路, 再思考细节问题(边界情况)
主体思路 :
- 两个数组的末尾进行对比, 哪个大就填充到
nums1
的末尾
细节问题 :
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int i = m - 1, j = n - 1;
for(int k = m + n - 1 ; k >= 0 ; k--) {
if (j < 0 || (i >= 0 && nums1[i] > nums2[j])) {
nums1[k] = nums1[i];
i--;
}else{
nums1[k] = nums2[j];
j--;
}
}
}
}
可以看到上面的代码, 变量一共有3个 , i , j , k
其中 k 的值始终是大于 0 的 所以 k 值是在整个过程中不会数组越界。
但是对于i
和j
是没有限制的 所以需要判断边界条件,i
和j
都需要大于等于 0
才可以
j < 0
表示 nums2 数组的元素已经合并完毕了