0
点赞
收藏
分享

微信扫一扫

【力扣】88. 合并两个有序数组

标题: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;
           }
        }
    }
}

举报

相关推荐

0 条评论