首页 > 其他分享 >88. 合并两个有序数组

88. 合并两个有序数组

时间:2023-10-31 22:05:04浏览次数:31  
标签:数组 int 合并 88 -- length 有序 nums1 nums2

88. 合并两个有序数组_数组

描述

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。

请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。

注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。

 

示例 1:

输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
输出:[1,2,2,3,5,6]
解释:需要合并 [1,2,3] 和 [2,5,6] 。
合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注的为 nums1 中的元素。

示例 2:

输入:nums1 = [1], m = 1, nums2 = [], n = 0
输出:[1]
解释:需要合并 [1] 和 [] 。
合并结果是 [1] 。

示例 3:

输入:nums1 = [0], m = 0, nums2 = [1], n = 1
输出:[1]
解释:需要合并的数组是 [] 和 [1] 。
合并结果是 [1] 。
注意,因为 m = 0 ,所以 nums1 中没有元素。nums1 中仅存的 0 仅仅是为了确保合并结果可以顺利存放到 nums1 中。

 

提示:

  • nums1.length == m + n
  • nums2.length == n
  • 0 <= m, n <= 200
  • 1 <= m + n <= 200
  • -109 <= nums1[i], nums2[j] <= 109

代码

class Solution {
    //反向双指针(update:单纯蒙着头写忘记用上m、n了...)
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int i=nums1.length-nums2.length-1,j=nums2.length-1;
        int t=nums1.length-1;
        while(i>=0&&j>=0){  //0到length-1,或者1到length
            if(nums2[j]>nums1[i])
                nums1[t--]=nums2[j--];
            else
                nums1[t--]=nums1[i--];
        }
        while(j>=0)nums1[t--]=nums2[j--];   //目的就是合并两个数组,nums1可能为空,要补全遗漏的
    }
}

标签:数组,int,合并,88,--,length,有序,nums1,nums2
From: https://blog.51cto.com/u_16040716/8113697

相关文章

  • 代码 测试用例 测试用例 测试结果 26. 删除有序数组中的重复项
    给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通......
  • Codeforces Round 906 Div. 1 (CF1889)
    貌似现在发周六的CF题解已经失去了时效性,不过问题不大。A.QingshanLovesStrings2Description定义一个长度为\(k\)的\(01\)串\(s\)是好的,当且仅当\(\foralli\in[1,k],s_i\neqs_{k-i+1}\)。现给你一个串,每次操作你可以在任意位置插入一对\(01\)。请构造操作方......
  • 【算法题】2788. 按分隔符拆分字符串
    题目:给你一个字符串数组words和一个字符separator,请你按separator拆分words中的每个字符串。返回一个由拆分后的新字符串组成的字符串数组,不包括空字符串。注意separator用于决定拆分发生的位置,但它不包含在结果字符串中。拆分可能形成两个以上的字符串。结果字符串必......
  • CF1889B
    题面给一个\(n\)个点的图,每个点\(i\)有点权\(a_i\),初始图上没有边,你可以进行如下操作若干次:若\(S_i+S_j\gei\timesj\timesc\),添加一条边\((i,j)\)。其中\(S_i\)表示\(i\)所在连通块的点权和,\(c\)是一个给定的常数。问最终能否使图联通。首先我们有一个简......
  • 如何将内容添加到数组中?
    内容来自DOChttps://q.houxu6.top/?s=如何将内容添加到数组中?在JavaScript中,如何将一个对象(如字符串或数字)添加到数组中?使用Array.prototype.push方法将值添加到数组的末尾://初始化数组vararr=["Hi","Hello","Bonjour"];//在数组末尾添加新值arr.push(......
  • c# 将十进制数字转换成字节数组
    //将十进制数字转换成字节数组//由数字创建字节数组publicstaticbyte[]DecimalToByteArray(decimalsrc){//创建内存流MemoryStream,stream作为存放二进制数据的缓存using(MemoryStreamstream=newMemoryStream())......
  • CF1889D
    题意给定\(n\)个栈,栈的大小分别为\(k_i\),每个栈内元素\(\in[1,n]\),记从第\(i\)个栈开始的答案为\(ans_i\),流程:若栈\(i\)为空,答案为\(i\);否则弹出栈顶元素\(x\),并前往栈\(x\),继续刚才的操作。\(n\le10^5,\sumk_i\le10^6\)做法考虑弱化情况,\(k_i=1\),记栈\(i\)元素为\(p_i\)......
  • 无涯教程-C语言 - 数组(Array)
    数组是一种数据结构,可以存储相同类型的元素的固定大小的顺序集合。所有数组均包含连续的内存位置,最低地址对应于第一个元素,最高地址对应于最后一个元素。声明数组要在C中声明数组,程序员可以指定元素的类型和数组所需的元素数量,如下所示-typearrayName[arraySize];这称为......
  • Ubuntu安装8188fu驱动
    ##https://github.com/kelebek333/rtl8188fuREADMERTL8188FUdriverforLinuxkernel4.15.x~6.5.x(LinuxMint,UbuntuorDebianDerivatives)info:rtl8188fusupportwillbeaddtortl8xxxumoduleofLinuxkernel. https://patchwork.kernel.org/project/linu......
  • 数组,list,字符串的一些转换
    //list转数组Long[]ids=updateIds.toArray(newLong[updateIds.size()]) // 数组转listList<String>reasonList=Arrays.asList(perm.trim().split(",")) // String转数组String[]reasons=business.getReason().split(",") //数组转字符串需要引⼊......