LeetCode.88合并两个有序数组

LeetCode.88合并两个有序数组

  • 1.问题描述
  • 2.解题思路
  • 3.代码

1.问题描述

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

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

注意:最终,合并后数组不应由函数返回,而是存储在数组 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

2.解题思路

  1. 设置两个索引 ij 分别指向 nums1 和 nums2 的有效元素的尾部,从它们的尾部开始向前遍历,同时设置索引 cur 指向 nums1最末尾

  2. 在每次遍历过程中,比较 ij 指向的元素值大小,把大的元素填充到 cur 的位置

  3. 填充完毕说明那个元素已经放置在它应该放置的位置,不需要在管它了,把 cur 向前移动,同时把 i 或者 j 向前移动,继续比较 ij 指向的元素值大小,把大的元素填充到 cur 的位置。

3.代码

python:

from typing import Listclass Solution:def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> List[int]:# 索引从有序数组 nums1 有效元素的末端开始# 数组的下标索引从零开始计数# 索引   0    1     2# 数组 [ 1 ,  2  ,  3 ]i = m - 1# 索引从有序数组 nums2 的末端开始j = n - 1# 从有序数组 nums1 最末端的位置开始保存元素cur = m + n - 1# 通过循环把 num2 的元素都移动到 num1 中while j >= 0:# 比较 num1 和 num2 中当前的元素大小# 如果 num1 中的索引位置为 i 的元素大于 num2 中索引位置为 j 的元素# 为了防止越界 i 必须是大于等于 0if i >= 0 and nums1[i] > nums2[j]:# 把 num1 中的索引位置为 i 的元素复制到索引为 cur 的位置# 此时 cur 的元素已经确定下来nums1[cur] = nums1[i]# 接下来去确定 cur 前面一个元素应该放什么数字cur -= 1# 此时,索引 i 需要向前移动i -= 1# 否则,如果 num1 中的索引位置为 i 的元素小于或者等于 num2 中索引位置为 j 的元素else:# 把 num2 中的索引位置为 j 的元素复制到索引为 cur 的位置nums1[cur] = nums2[j]# 接下来去确定 cur 前面一个元素应该放什么数字cur -= 1# 此时,索引 j 需要向前移动j -= 1return nums1solution = Solution()
nums1 = [1, 2, 3, 0, 0, 0]
m = 3
nums2 = [2, 5, 6]
n = 3  # 示例输入n
print(solution.merge(nums1, m, nums2, n))

C++:

#include<iostream>
#include <vector>
using namespace std;
class Solution {public:void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {int i = m - 1;int j = n - 1;int cur = nums1.size() - 1;while( j >= 0  ) {if( i >=0 && nums1[i] > nums2[j] ) {nums1[cur] = nums1[i];cur--;i--;} else {nums1[cur] = nums2[j];cur--;j--;}}}
};int main() {vector<int> nums1 = {1, 3, 5, 0, 0, 0}; int m = 3;vector<int> nums2 = {2, 4, 6}; int n = 3;Solution solution;solution.merge(nums1, m, nums2, n);cout << "Merged Array: ";for (int i = 0; i < nums1.size(); i++) {cout << nums1[i] << " ";}cout << endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/213473.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rocketMQ5.0顺序消息golang接入

本人理解&#xff0c;顺序消息如果不分消息组&#xff0c;那么会影响并行处理速度&#xff0c;所以尽量消息组分的散一些 首先上要求&#xff0c;官方文档如下&#xff1a; 总结&#xff1a; 1.必须同一个消息组&#xff0c;消息组和消费组不是一个概念&#xff0c;不要混 2.必…

Javaweb之前后台分离开发介绍的详细解析

2.1 前后台分离开发介绍 在之前的课程中&#xff0c;我们介绍过&#xff0c;前端开发有2种方式&#xff1a;前后台混合开发和前后台分离开发。 前后台混合开发&#xff0c;顾名思义就是前台后台代码混在一起开发&#xff0c;如下图所示&#xff1a; 这种开发模式有如下缺点&a…

java 手机商城免费搭建+电商源码+小程序+三级分销+SAAS云平台

【SAAS云平台】打造全行业全渠道全场景的SaaS产品&#xff0c;为店铺经营场景提供一体化解决方案&#xff1b;门店经营区域化、网店经营一体化&#xff0c;本地化、全方位、一站式服务&#xff0c;为多门店提供统一运营解决方案&#xff1b;提供丰富多样的营销玩法覆盖所有经营…

基于opencv+ImageAI+tensorflow的智能动漫人物识别系统——深度学习算法应用(含python、JS、模型源码)+数据集(一)

目录 前言总体设计系统整体结构图系统流程图 运行环境爬虫1.安装Anaconda2.安装Python3.63.更换pip源4.安装Python包5.下载phantomjs 模型训练1.安装依赖2.安装lmageAl 实际应用1.前端2.安装Flask3.安装Nginx 相关其它博客工程源代码下载其它资料下载 前言 本项目通过爬虫技术…

分布式篇---第三篇

系列文章目录 文章目录 系列文章目录前言一、什么是补偿事务?二、消息队列是怎么实现的?三、那你说说Sagas事务模型前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。…

【Vue】Vue3 配置全局 scss 变量

variables.scss $color: #0c8ce9;vite.config.ts // 全局css变量css: {preprocessorOptions: {scss: {additionalData: import "/styles/variables.scss";,},},},.vue 文件使用

2023年小学生古诗文大会复赛(复选)最后一天复习建议和答题策略

今天是2023年11月24日&#xff0c;星期五。 明天是2023年11月25日&#xff0c;星期六&#xff0c;也就是2023年第八届小学生古诗文大会复选&#xff08;复赛&#xff09;的日子&#xff0c;还有一天。 根据近期和一些家长的交流来看&#xff0c;大家都铆足了劲&#xff0c;希…

如何从 C# 制作报表到 FastReport Cloud

众所周知&#xff0c;我们的世界在不断发展&#xff0c;新技术几乎每天都会出现。如今&#xff0c;不再需要在办公室内建立整个基础设施、雇用人员来监控设备、处理该设备出现的问题和其他困难。 如今&#xff0c;越来越多的服务提供业务云解决方案&#xff0c;例如FastReport…

了解销售管理系统,看这篇就够了

在充满活力的现代商业环境中&#xff0c;高效的销售管理是成功的关键。 本文将全面介绍销售管理系统 及其对销售流程的变革性影响。 从潜在客户开发和机会管理到分析驱动的决策&#xff0c;销售管理系统旨在为销售团队提供提高生产力和绩效的工具。 本文分为销售管理系统的概念…

面向自然语言处理任务的预训练模型综述

源自&#xff1a;计算机应用 作者&#xff1a;刘睿珩&#xff0c; 叶霞&#xff0c; 岳增营 “人工智能技术与咨询” 发布 摘要 近年来&#xff0c;深度学习技术得到了快速发展。在自然语言处理&#xff08;NLP&#xff09;任务中&#xff0c;随着文本表征技术从词级上…

vscode在运行c语言时,无法scanf输入

问题&#xff1a; 在学习c语言中&#xff0c;我在使用scanf和cin时无法在终端进行输入(运行了但是无法输入)&#xff0c;在网上寻找答案&#xff0c;并写下笔记 解决方法 选择左上角 文件->首选项&#xff08;preferences&#xff09;->设置&#xff08;settings&#xf…