小白学习[leetcode][玩转双指针]之88合并两个有序数组

题目的链接在这里:
https://leetcode-cn.com/problems/merge-sorted-array/


题目大意

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

初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。


一、示意图

在这里插入图片描述

二、解题思路

java实现

代码如下:

class Solution {
    
    
     public  void  merge(int[] nums1, int m, int[] nums2, int n) {
    
    
        //使用两个指针,分别指向他们的末尾,而还有一个指针,相当于就是用来找每次的最大值
        //并且每次m,h移动的时候,pre也要对应的移动
        //这里有这个细节在
        int pre=(m--)+(n--)-1;
        while(m>=0&&n>=0){
    
    
            //只要这个条件还成立,也就是这两个数组都还有的情况之下,找到其中的最大值,并赋值给pre
            //n--,m--不会存在数组越界嘛 比如 123000 和456
            //不会越界的原因是 n--而不是--n 这样先返回的是n 不会出现-1
            nums1[pre--]=nums1[m]<nums2[n]?nums2[n--]:nums1[m--];
        }
        //然后如果n还存在的话,也还是需要继续赋值的
        while(n>=0){
    
    
            nums1[pre--]=nums2[n--];
        }
    }
}

在这里插入图片描述


猜你喜欢

转载自blog.csdn.net/qq_41115379/article/details/114357559