class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
//优先对数组nums1进行移动,要进行倒序移动否则例如[1,2,3,0],
//正序移动0移动到1会覆盖1的数据。
for(int i = m -1;i >= 0;i--){
nums1[i + n] = nums1[i];
}
int i = 0; //视为一个新的数组的索引
int i1 = n; //数组nums1的索引
int i2 = 0; //数组nums2的索引
while(i1 < m + n || i2 < n){
//有两种情况取nums1的值
//1.当nums1的数据取完并且nums2中还有元素时
//2.当两个数组都有元素并且 nums1[i1] < nums2[i2]
if(i1 < m + n && (i2 >= n ||( i2 < n && nums1[i1] < nums2[i2]))){
nums1[i] = nums1[i1];
i1++;
}else{
nums1[i] = nums2[i2];
i2++;
}
i++;
}
}
}