第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++; } } }