[Leetcode] 88. Merge Sorted Array

merge-sorted-array(合并已排序的数组) 题目描述 Given two sorted integer arrays A and B, merge B into A as one sorted array. Note: You may assume that A has enough space to hold additional elements from B. The number of elements initialized in... 阅读详情

Description:
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.

Note:
You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2. The number of elements initialized in nums1 and nums2 are m and n respectively.

Language: C++
解法一: Time Limit Exceed
第一种解法很直观,就是分别遍历两个数组,每一次遍历就做一遍比较,然后把两个数组元素按顺序存到新的数组array中,最后再用一个循环把数字逐个存回nums1数组中。但是这种方法不能AC,因为超时了。
Time: O(n)O(n)
Space: O(n)O(n)
多次循环

class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        vector<int> array;
        int i = 0, j = 0;
        while(i < nums1.size() && j < nums2.size()){
            if(nums1[i] < nums2[j]){
                array.push_back(nums1[i]);
                i++;
            }
            else{
                array.push_back(nums2[j]);
                j++;
            }
        }
        while(i < nums1.size())
            array.push_back(nums1[i]);
        while(j < nums2.size())
            array.push_back(nums2[j]);

        for(int i = 0; i != array.size(); i++)
            nums1[i] = array[i];
    }
};

解法二: AC
基本思想:三路partition。
思路:这个解法最关键的地方在于想到从数组的尾部入手。分别用三个指针i, j, k控制。i用来控制遍历nums1中A数组的元素,j用来控制遍历nums2也就是B数组的元素,k用来控制nums1从尾部开始排序。
很重要的还有一个隐含的条件,如果B数组先遍历完并插入到A,A剩下的部分就不用动了,因为A原本已经是sorted array了,也就是假如遍历到最后A还有没遍历的,B全部遍历完了,那么就结束了因为A的前半部分本身就已经sorted了;假如A遍历完了B还没有遍历完,那么剩下的工作就是把B插入nums1前面部分剩下的位置就好了,因为同样的道理,B本身也是sorted的。
Time: O(n)O(n)
Space: O(1)O(1)

class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {

        assert(nums1.size() == m+n && nums2.size() == n);
        int i = m - 1;//全部从尾部开始
        int j = n - 1;
        int k = m + n - 1;

        while(i >= 0 && j >= 0){
            if(nums1[i] >= nums2[j])
                nums1[k--] = nums1[i--];
            else
                nums1[k--] = nums2[j--];
        }
        while(j >= 0)
            nums1[k--] = nums2[j--];
    }
};

算法细节:

  • 复习一下merge sort相关的内容,然后思考一下它与这道题以及三路partition的关系

解法三: AC
思路:这是一个更简洁的代码。思路和解法二相同,从解法二我们看到,nums[k--] = nums2[j--];成立的条件一个是i >= 0,一个是nums[i] >= nums[j],且都是在j>=0的时候成立的,因此代码可以采用正则表达式简洁写出。
Time: O(n)O(n)
Space: O(1)O(1)

class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {

        assert(nums1.size() == m+n && nums2.size() == n);
        int i = m - 1;//全部从尾部开始
        int j = n - 1;
        int k = m + n - 1;

        while(j >= 0)
            nums1[k--] = nums1[i]>=nums2[j]&&i >= 0 ? nums1[i--] : nums2[j--];
    }
};
Merge Sorted Array合并排序数组leetcode Merge Sorted Array 合并 排序 数组 leetcode 立即下载

相关推荐

以太网传输硬件设计大全

1.网线的介绍RJ45由插头和插做组成,也就是我们常说的网口和网线。RJ45 网线插头又称水晶头,共有八芯做成。RJ45网络传输线分为直通线、交叉线和全反线。直通线用于异种网络设备之间的互连,例如,计算机与交换机。交叉线用于同种网络设备之间的互连,例如,计算机与计算机。全反线用于超级终端与网络设备的控制物理接口之间的连接。下面将介绍一下各线的作用和区别。1.直通线:又叫正线或标准线,两端采用568B做线标准,注意两端都是同样的线序且一一对应。直通线是应用最广泛,现在最常用的线。

weixin_45365488的博客 6749

【LeetCode 算法】Merge Sorted Array 合并两个有序数组

注意指针的移动,别越界,当一个指针小于0时,就可以单独处理另一个指针。**注意:**最终,合并后数组不应由函数返回,而是存储在数组。个元素表示应合并的元素,后。中,使合并后的数组同样按。常见的处理方式,就不赘述了。先说结论,从尾部进行双指针。整个过程可以看成是一个。

Cui's Blog 483

用Plecs搞定半桥LLC谐振变换器仿真:从开环模型搭建到闭环PI调参全流程

本文详细介绍了使用Plecs仿真工具进行半桥LLC谐振变换器从开环模型搭建到闭环PI调参的全流程操作。涵盖仿真环境准备、关键元件参数计算、波形异常排查、闭环控制实现及PI参数整定等核心内容,特别针对仿真中的收敛性问题提供实用解决方案,助力电力电子设计者高效完成LLC变换器仿真验证。

weixin_28455801的博客 569

Merge Sorted Array

题目名称 Merge Sorted Array—LeetCode链接描述 Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.Note: You may assume that nums1 has enough space (size that is greate

494

网络工程系统CAD图:从设计到落地的关键技能与实战指南

网络工程并不只是配置路由器和交换机,真正的核心在于将设计方案转化为可施工的物理图纸。网络工程系统CAD图正是连接逻辑设计与物理世界的桥梁,它涵盖综合布线、信息点布置、桥架路由、弱电间规划等关键内容。理解并掌握这套图纸体系,是网络工程师从基础设备调试走向项目主导者、弱电总工乃至网络架构师的重要分水岭。在园区网、数据中心、智能楼宇等真实场景中,一套规范的系统CAD图直接决定了施工质量、验收效率与后期运维的可靠性。本文从基础概念出发,拆解图纸的组成层次、绘制流程和软件工作流,并结合学习路线与就业方向,帮助初学者建

weixin_33860553的博客 389

Docker深度详解:从原理到实践的全方位指南

本文深入解析了Docker容器化技术的核心原理与实战应用。主要内容包括:1) Docker核心架构与优势,对比容器与虚拟机的关键差异;2) 企业级部署方案,涵盖离线安装与多镜像源配置;3) 高级镜像构建技术,如参数化构建、缓存优化及安全扫描;4) 容器生命周期管理,包括健康检查、资源限制及数据持久化方案。文章提供了丰富的代码示例和生产级配置建议,如使用Trivy进行安全扫描、精确控制容器资源等技术细节,帮助开发者全面掌握现代容器化技术。

weixin_42593797的博客 1280

leetcode 88. Merge Sorted Array 详解 python3

一.问题描述 Given two sorted integer arraysnums1andnums2, mergenums2intonums1as one sorted array. Note: The number of elements initialized innums1andnums2aremandnrespectively. You may as...

CSerwangjun的博客 646

双Orin PCIe RC&EP模式互通

orin pcie 互通

乐于分享 3877

数据结构与算法应用(六):Merge Sorted Array

Merge two given sorted integer array A and B into a new sorted integer array. (合并两个排好序的数组) 样例 A=[1,2,3,4] B=[2,4,5,6] return [1,2,2,3,4,4,5,6] 挑战 Expand How can you optimize your algorithm

风的专栏 1441

STM32入门教程:图像处理

然后,我们使用 STM32 的 DSP 模块中的 arm_mean_u8 函数计算原始图像的平均值,并将结果存储在 meanValue 变量中。然后,我们需要编写代码配置 STM32 的外部中断输入引脚,并在中断处理函数中读取 OV7670 摄像头模块输出的图像数据。然后,我们需要编写代码配置 STM32 的 USB OTG 接口,并在回调函数中读取 USB 摄像头输出的图像数据。一、图像采集 图像采集是图像处理的第一步,我们需要将外部图像源的数据导入到 STM32 中进行处理。

2401_85625565的博客 1616

Halcon 形态学 开发案例 (开运算opening(先腐蚀再膨胀)、闭运算closing(先膨胀再腐蚀))

算子方法:功能:使用用户自定义的结构元素对区域进行开运算参数: Region(输入参数) :输入区域 StructElement(输入参数) :结构元素(区域) RegionOpening(输出参数) :开运算后的区域功能:使用圆形结构元素对区域进行开运算参数: Region(输入参数) :输入区域 RegionOpening(输出参数) :开运算后的区域 Radius(输入参数) :圆形结构元素的半径功能:使用矩形结构元素对区域进行开运算。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 1618

LeetCode 88. Merge Sorted Array 题解

本题是双指针的经典应用问题,主要考察对双指针技巧的理解和使用。通过使用双指针从后向前遍历,我们可以高效地合并两个有序数组,而不需要额外的空间。双指针的核心思想是:使用两个指针分别指向两个数组的末尾,比较它们的元素,将较大的元素移动到nums1的末尾,然后移动相应的指针。这种方法不仅适用于合并两个有序数组问题,还可以应用于许多其他需要合并有序数组的场景。掌握双指针的使用,对于解决这类问题非常重要。

cannonjinx的博客 4180

【PCIe 总线及设备入门学习专栏 1.3 -- PCIe 基础知识 lane和link介绍】

PCIe RC(Root Complex)是PCIe树的根节点,一个RC 可以包括多个 RP(Root Port),例如一个16 条 lane的PCIe RC 可以包括4个RP(4个x4的),或者8个RP(8个x2的)等等。在该模式下,数据传送由CPU执行I/O端口指令来按照字节或更大的数据单位来处理,占用大量的CPU资源,数据传输速度也大大低于DMA模式。国内应该有公司做出相应的phy芯片(例如芯动科技、牛芯半导体),毕竟常见的pcie 3.0才8 Gbps的速率,最新的6.0才64Gbps。

CodingCos的博客 2104

【力扣算法 LeetCode】88. Merge Sorted Array合并两个有序数组

文章目录前言一、题目二、解答1.代码2.复盘总结 前言 题目出自力扣 算法练习题:合并两个有序数组 一、题目 题目 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表

南迁的博客 367

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Leetcode 88. Merge Sorted Array

Leetcode 88. Merge Sorted Array

weixin_45428910的博客 1327

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

LeetCode力扣 88. 合并两个有序数组 Merge Sorted Array 题解代码 JavaScript

问题https://leetcode-cn.com/problems/merge-sorted-array/ 练习使用JavaScript解答 /** * @param {number[]} nums1 * @param {number} m * @param {number[]} nums2 * @param {number} n * @return {void} Do not return anything, modify nums1 in-place instead. */ var.

Coding home - 漂流瓶jz 560

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【leetCode】leetCode88 Merge Sorted Array

题目: Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note: The number of elements initialized in nums1 and nums2 are m and n respectively. You may assume ...

随手积累,典型bug解决。技术栈的系统介绍。 196

【leetcode c++】88 Merge Sorted Array

Merge Sorted Array Given two sorted integer arrays nums1 andnums2, merge nums2 into nums1 as one sorted array.   Note: You may assume that nums1 has enough space(size that is greater or equal to m

lif的博客 1395

【LeetCode】88. Merge Sorted Array

我的个人微信公众号:Microstrong 微信公众号ID:MicrostrongAI 微信公众号介绍:Microstrong(小强)同学主要研究机器学习、深度学习、计算机视觉、智能对话系统相关内容,分享在学习过程中的读书笔记!期待您的关注,欢迎一起学习交流进步! 知乎主页:https://www.zhihu.com/people/MicrostrongAI/activities Git...

Microstrong 569

闯关leetcode——88. Merge Sorted Array

这题就是要将两个有序数组合并到其中一个数组中。相较于其他数组合并问题,这题要求数组合并到待合并的数组nums1地址空间中。nums1前m个元素是有序的,后n个数据位0,以保证整个空间可以正好存下两个数组的数据。为了防止元素的频繁移动,我们需要从后向前对比并布局数据。这样只要进行一次遍历,就可以将顺序排好。

方亮的专栏 1231

LeetCode88——Merge Sorted Array

合并两有序数组

上善若水 615

LeetCode88 Merge Sorted Array

LeetCode88 Merge Sorted Array 问题来源LeetCode88 问题描述 Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note: You may assume that nums1 has enough spa

yanqinghe123的专栏 217

leetcode 88 Merge Sorted Array

Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note: You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold addit

shiter编写程序的艺术 4052
上一篇: [Leetcode] 75. Sort Colors
下一篇: [机器学习] 线性回归算法 (Linear Regression)
Peggy_Chang
博客等级 码龄11年 21粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值