14.合并两个有序数组

一、题目描述

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

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

二、代码演示

//官方答案,自己理解一下,给出详细注释
class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        //创建一数组,存放nums1和nums2的值
        int[] arr = new int[m+n];
        //创建arr数组的指针索引
        int idx = 0;
        //创建i,j指针
        for (int i=0, j=0; i<m || j<n;){
            //当同时满足i,j指针索引小于数组nums1和nums2的长度时
            if(i<m && j<n){
            //这里用一个三元表达式,如果nums1[i]<nums2[j]成立,那么将nums1[i++]给arr[idx++]
                arr[idx++] = nums1[i]<nums2[j] ? nums1[i++] : nums2[j++];
            //当只满足i<m,也就是nums2是空数组,或者已经先遍历完了
            }else if(i<m){
                arr[idx++] = nums1[i++];
            //当只满足j<n,也就是nums1是空数组,或者已经先遍历完了
            }else if(j<n){
                arr[idx++] = nums2[j++];
            }
        }
        /*实现数组到数组之间的拷贝
            System.arraycopy(arr, 0, nums1, 0,m+n)
            arr:源数组
            0:源数组复制的起始位置
            nums1:目标数组
            0:目标数组放置的起始位置
            m+n:复制的长度
        */
        System.arraycopy(arr, 0, nums1, 0, m+n);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值