首页 > 其他分享 >Leetcode——1.合并有序数组

Leetcode——1.合并有序数组

时间:2024-09-02 15:29:49浏览次数:8  
标签:数组 int 合并 nums1 有序 copy Leetcode nums2

给你两个按 非递减顺序 排列的整数数组 nums1_ nums2,另有两个整数 mn ,分别表示 nums1nums2 中的元素数目。
请你 合并 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 中。

解法1:双指针

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) { 
        int[] nums1_copy = new int[m];
        System.arraycopy(nums1,0,nums1_copy,0,m);

        int p = 0, q = 0;
        int cur = 0;

        while (p != m && q != n) { 
            nums1[cur++] = nums1_copy[p] > nums2[q] ? nums2[q++] : nums1_copy[p++];
        }

        if(p < m)
            System.arraycopy(nums1_copy,p,nums1,p+q,m+n-p-q);
        if(q < n)
            System.arraycopy(nums2,q,nums1,p+q,m+n-p-q);
    }
}

解法2:合并排序

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        for (int i = 0; i != n; ++i) {
            nums1[m + i] = nums2[i];
        }
        Arrays.sort(nums1);
    }
}

标签:数组,int,合并,nums1,有序,copy,Leetcode,nums2
From: https://www.cnblogs.com/cymxd/p/18392738

相关文章

  • 65. 类模板应用 – 数组类封装
    类模板应用–数组类封装将类写到myArray.hpp中属性:T*pAddress;指向堆区数组指针intm_Capacity数组容量intm_Size;数组大小行为myArray(intcapacity)myArray(constMyArray&arr)operator=operator[]~myArray()getCapacitygetSizepushbackmyArray.hpp#p......
  • 【好用小方法】随机生成n个汉字/数字转汉字/字符串去重/list数组去重/获取2的幂次方/
    /***根据参数生成n个中文汉字**@paramnum*@return*/publicstaticList<String>getChaineseList(intnum,List<String>aa){if(num<=0)returnaa;Stringword="";if(aa.size()>0){for(Strings:aa)......
  • 每日一题:Leetcode-224 基本计算器
    力扣题目解题思路java代码力扣题目:给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval() 。示例1:输入:s="1+1"输出:2示例2:输入:s="2-1+2"输出:3示例3:输入:s......
  • 【LeetCode】两数之和
    题目:在数组中找到2个数之和等于给定值的数字,结果返回2个数字在数组中的下标。要求时间复杂度为 O(n)。解题分析:作者:halfrost链接:https://leetcode.cn/leetbook/read/leetcode-cookbook/5lu4og/顺序扫描数组,对每一个元素,在map中找能组合给定值的另一半数字,如果找......
  • Leetcode37-和相等的子数组(2395)
    1、题目给你一个下标从0开始的整数数组nums,判断是否存在两个长度为2的子数组且它们的和相等。注意,这两个子数组起始位置的下标必须不相同。如果这样的子数组存在,请返回true,否则返回false。子数组是一个数组中一段连续非空的元素组成的序列。示例1:输入......
  • ReactJs:使用映射函数后我的父数组得到更新
    在React中,使用映射函数后父数组得到更新是正常的行为。映射函数会创建一个新的数组,其中包含了原始数组中每个元素经过映射操作后的结果。如果你希望在映射函数中修改原始数组,你可以使用forEach方法来遍历数组,并在遍历过程中修改元素。以下是一个示例:constparentArray=[1,2,......
  • 将新对象添加到特定现有数组名称内,并使用索引值进行保存
    你可以使用JavaScript的数组方法来实现这个功能。以下是一个示例代码:letarray=[{id:1,name:'John'},{id:2,name:'Jane'},{id:3,name:'Jack'}];letnewObject={id:4,name:'Jill'};array[array.length]=newObject;c......
  • leetcode 75. Sort Colors & 三路快速排序
    leetcode75.SortColors&三路快速排序只有0和1的情况在这种简化情况下,我们只需要顺序遍历数组,遇到0就放到前面即可。classlocalExperiment{public:voidsort01(std::vector<int>&nums){intzero_ptr=0;for(inti=0;i<nums.size();......
  • 一维数组的使用和存储
    数组下标C语言中规定数组是有下标的,从0开始,假设数组有n个元素,则最后一个元素的下标为n-1。下标相当于数组元素的编号。在C语言中数组的访问提供了一个操作符[],叫作下标引用操作符。数组元素的打印与输入#include<stdio.h>intmain(){intarr[10]={1,2,3,4,5,6......
  • 一维数组
    数组一组相同类型元素的集合。数组中存放的是一个或多个数据,数据类型相同。数组的创建//typearr_name[常量值]存放在数组的值称为数组的元素,创建时可指定数组的大小和元素类型。type指定的是元素类型,可以是char、short、int等,也可以是自定义的类型;arr_name指的是数组的......