第88题:合并两个有序数组

一. 问题描述

给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。

说明:

初始化 nums1 和 nums2 的元素数量分别为 m 和 n。

你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。

示例:

输入:

nums1 = [1,2,3,0,0,0], m = 3

nums2 = [2,5,6],       n = 3

输出: [1,2,2,3,5,6]

二. 解题思路

本题思路:采用双指针的方法对数组进行求解。

步骤一:设a指向数组nums1的第一个数,b指向数组nums2的第一个数。

步骤二:从a开始对数组nums1进行遍历找到第一个比b大的数字,位置为新的a。

步骤三:将此时a后面的nums1数组里面数字后移一位,并将b插入a的位置。

步骤四:a++,b++,判断b是否将数组nums2遍历完毕,否则返回步骤二。

三. 执行结果

执行用时 :1 ms, 在所有 java 提交中击败了76.21%的用户

内存消耗 :36 MB, 在所有 java 提交中击败了85.86%的用户

四. Java代码

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int a=0;
            int b=0;
            if(n==0)
                return;
            while(b<nums2.length)
            {
                for(int i=a;i<nums1.length;i++)
                {
                    if(nums1[i]>nums2[b]||i==m)
                    {
                        int j=m-1;
                        while(i<=j)
                        {
                            nums1[j+1]=nums1[j];
                            j--;
                        }
                        nums1[i]=nums2[b];
                        m++;
                        a=i+1;
                        break;
                    }
                }
                b++;
            }
    }
}
原文地址:https://www.cnblogs.com/xiaobaidashu/p/11740337.html