标题:88. 合并两个有序数组
 难度:简单
示例 1:
示例 2:
示例 3:
提示:
- nums1.length == m + n
- nums2.length == n
- 0 <= m, n <= 200
- 1 <= m + n <= 200
- -109 <= nums1[i], nums2[j] <= 109
进阶:你可以设计实现一个时间复杂度为 O(m + n) 的算法解决此问题吗?
解题思路:
1.既然nums1实际长度是m + n 那么就从后向前添加数据
2.因为都是有序递增数组,如果nums2 添加完毕了,那么就退出循环
3.然后分别用m1记录遍历nums1到哪里,用n2记录nums2遍历到哪里
class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int m1 = m-1;
        int n2 = n-1;
        //从最后一位开始添加
        for(int i = m + n -1;i >= 0;i--){
           //确保nums2都已转移到nums1
           if(n2 >= 0){
               //m1 >= 0 是 防止 m = 0 的情况数组越界
               if(m1 >= 0 && nums1[m1] > nums2[n2]){
                    nums1[i] = nums1[m1];
                    m1 -= 1;
               }else{
                    nums1[i] = nums2[n2];
                    n2 -= 1;
               }
           }else{
               break;
           }
        }
    }
}










