LeetCode—88. Merge Sorted Array

LeetCode—88. Merge Sorted Array

题目

  1. 将两个有序数组合并,使得合并后的数组仍然有序。其中,数组1后面已补零使得其的长度大于等于两个数组的总长度。
    在这里插入图片描述

思路及分析

88题。这道题用插入排序可以解决,但是时间复杂度是 n 2 n^2 .这里不用插入排序的方法。我们每次同时从后往前取两个数组的一个元素,将较大的放在数组1的最后,注意这里最后应该是m+n-1而不是m-1。所以这里需要三个指针分别指向三个末尾位置。另外,最后当一个数组元素全部拍完后,另一个数组可能还有剩余,如果是数组1剩余,我们不用管他,如果是数组2剩余,我们需要将这些元素在暗许放入 。

代码

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int totalLen = m+n-1;
        int i = m-1;
        int j = n-1;
        while(i>=0 && j>=0){
            if(nums1[i]>nums2[j]){
                nums1[totalLen--] = nums1[i--];
            }else{
                nums1[totalLen--] = nums2[j--];
            }
        }
        while(j>=0){
            nums1[totalLen--] = nums2[j--];
        }
    }
}

猜你喜欢

转载自blog.csdn.net/pnnngchg/article/details/84304005