算法leetcode|88. 合并两个有序数组(rust重拳出击)
文章目录
- 88. 合并两个有序数组:
- 样例 1:
- 样例 2:
- 样例 3:
- 提示:
- 分析:
- 题解:
- rust:
- go:
- c++:
- python:
- java:
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
分析:
- 面对这道算法题目,二当家的再次陷入了沉思。
- 如果直接就把
nums2放到num1后面,然后再对合并后的num1进行排序,时间复杂度是O((m+n)log(m+n)),不是很理想,完全没有使用数组本身有序这个便利条件。 - 对排序算法熟悉的话,可以想到归并排序算法,其中将两个有序部分合并到一起正好就是我们要做的,但是这样需要额外的空间,而且最后还需要把结果再拷贝回
num1。 - 稍稍做下优化,前面我们之所以要使用额外空间就是因为处理过程中会把还没有处理的
num1部分覆盖,我们可以逆向遍历处理,因为最开始num1的后半部分是空的,所以我们就选取较大值放到末尾,依次处理,而且只要将nums2处理完毕就可以停止了,因为num1的剩余部分已经是有序的,这样不需要额外空间,而且时间复杂度仅仅是O(m+n),非常不错。
题解:
rust:
impl Solution {pub fn merge(nums1: &mut Vec<i32>, m: i32, nums2: &mut Vec<i32>, n: i32) {let (mut l1, mut l2, mut l) = (m - 1, n - 1, m as usize + n as usize - 1);while l2 >= 0 {if l1 >= 0 && nums1[l1 as usize] > nums2[l2 as usize] {nums1[l] = nums1[l1 as usize];l1 -= 1;} else {nums1[l] = nums2[l2 as usize];l2 -= 1;}l -= 1;}}
}
go:
func merge(nums1 []int, m int, nums2 []int, n int) {l1, l2, l := m-1, n-1, m+n-1for l2 >= 0 {if l1 >= 0 && nums1[l1] > nums2[l2] {nums1[l] = nums1[l1]l1--} else {nums1[l] = nums2[l2]l2--}l--}
}
c++:
class Solution {
public:void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {int l1 = m - 1;int l2 = n - 1;int l = m + n - 1;while (l2 >= 0) {nums1[l--] = l1 >= 0 && nums1[l1] > nums2[l2] ? nums1[l1--] : nums2[l2--];}}
};
python:
class Solution:def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:"""Do not return anything, modify nums1 in-place instead."""l1, l2, l = m - 1, n - 1, m + n - 1while l2 >= 0:if l1 >= 0 and nums1[l1] > nums2[l2]:nums1[l] = nums1[l1]l1 -= 1else:nums1[l] = nums2[l2]l2 -= 1l -= 1
java:
class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {int l1 = m - 1;int l2 = n - 1;int l = m + n - 1;while (l2 >= 0) {nums1[l--] = l1 >= 0 && nums1[l1] > nums2[l2] ? nums1[l1--] : nums2[l2--];}}
}
非常感谢你阅读本文~
欢迎【点赞】【收藏】【评论】三连走一波~
放弃不难,但坚持一定很酷~
希望我们大家都能每天进步一点点~
本文由 二当家的白帽子:https://le-yi.blog.csdn.net/ 博客原创~
相关文章:
算法leetcode|88. 合并两个有序数组(rust重拳出击)
文章目录 88. 合并两个有序数组:样例 1:样例 2:样例 3:提示: 分析:题解:rust:go:c:python:java: 88. 合并两个有序数组: …...
GoLong的学习之路,进阶,语法之并发(并发错误处理)补充并发三部曲
这篇文章主要讲的是如何去处理并发的错误。 在Go语言中十分便捷地开启goroutine去并发地执行任务,但是如何有效的处理并发过程中的错误则是一个很棘手的问题。 文章目录 recovererrgroup recover 哦对,似乎没写错误处理的文章。后面补上。 首先&…...
猪酒店房价采集
<?php // 设置代理 $proxy_host jshk.com.cn;// 创建一个cURL资源 $ch curl_init();// 设置代理 curl_setopt($ch, CURLOPT_PROXY, $proxy_host.:.$proxy_port);// 连接URL curl_setopt($ch, CURLOPT_URL, "http://www.zujia.com/");// 发送请求并获取HTML文档…...
Java基础知识第四讲:Java 基础 - 深入理解泛型机制
Java 基础 - 深入理解泛型机制 背景:Java泛型这个特性是从JDK 1.5才开始加入的,为了兼容之前的版本,Java泛型的实现采取了“伪泛型”的策略,即Java在语法上支持泛型,但是在编译阶段会进行所谓的“类型擦除”࿰…...
ceph-deploy bclinux aarch64 ceph 14.2.10【2】vdbench rbd 块设备rbd 测试失败
上篇 ceph-deploy bclinux aarch64 ceph 14.2.10-CSDN博客 安装vdbench 下载vdbench 下载页面 Vdbench Downloads (oracle.com) 包下载 需要账号登录,在弹出层点击同意才能继续下载 用户手册 https://download.oracle.com/otn/utilities_drivers/vdbench/vdb…...
split_train_val
# coding:utf-8 import os import random import argparse parser argparse.ArgumentParser() # xml文件的地址,根据自己的数据进行修改 xml一般存放在Annotations下 parser.add_argument(--xml_path, defaultdata_door_white/xml/train, typestr, helpinput xm…...
Linux Mint 21.3 将搭载 Cinnamon 6.0 和实验性 Wayland 支持
导读Wayland 会话可能在 Linux Mint 23 系列中成为默认选项,预计将在 2026 年实现。 Linux Mint 项目今天在他们的每月新闻通讯中 宣布,他们已经开始着手在未来的 Linux Mint 发行版中实施 Wayland 会话,最初将在 Linux Mint 21.3 中提供。 …...
名师助阵龙讯旷腾PWmat+半导体缺陷培训暨半导体缺陷计算大赛
半导体缺陷计算大赛 选拔赛截止日期:11月23日 参与杭州线下培训直接跳过选拔赛 大赛亮点 线上免费培训、线下限时领取免费名额 线下杭州培训可直通决赛,跳过选拔赛 线上培训有3次机会参与考试进入决赛 已购/未购用户均可参加、无身份限定 使用Mc…...
Kotlin与Java写法的变更
目录 获取类的Java Class属性 类型检查 for循环 switch语句 if判断 获取类的Java Class属性 //Java Intent intent new Intent(this, MainActivity.class);//Kotlin val intent Intent(this, MainActivity::class.java) 类型检查 //Java apple instanceof Fruit !(app…...
京东数据软件系统:京东销量和销额数据在哪里看?
京东平台店铺众多,行业同行也数不胜数,若想要在平台中更好的运营店铺,品牌需要做好数据分析。下面结合鲸参谋电商数据分析平台这一数据分析工具,我们来看一看品牌在做数据分析时需要注重哪些数据维度。 *行业数据 京东商家通过鲸…...
美观且功能丰富的控制台:5个.Net开源项目
今天一起盘点下,9月份推荐的5个.Net开源项目(点击标题查看详情)。 1、FTP开源库 FluentFTP是一个基于.Net开发的,可用于FTP和FTPS文件传输。该项目优化了速度,并提供简单易用的API,让开发人员可以快速地集…...
深度学习模型基于Python+TensorFlow+Django的垃圾识别系统
欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 要使用Python、TensorFlow和Django构建一个垃圾识别系统,您可以按照以下步骤进行操作: 安装…...
ArcGIS Pro怎么生成山顶点
山顶点是指山脉、山丘或山脉系统中最高的地点,通常是山的最高峰,这是山地地貌中的最高点,往往是山脉的标志性特征之一,这里为大家介绍一下如何使用ArcGIS Pro获取山顶点,希望能对你有所帮助。 数据来源 本教程所使用…...
Anolis 8.6 安装 Drawio
Anolis 8.6 安装 Drawio 22.1.0 一.RPM版(不建议)二.WAR 包部署 一.RPM版(不建议) Draw RPM 包下载链接 RPM 包直接基于Linux图形化能力部署,服务器类型的Linux系统启动RPM包安装的Draw可能比较复杂 系统版本 ## 1.…...
AI图像生成模型LCMs: 四个步骤就能快速生成高质量图像的新方法
在最新的AI模型和研究领域,一种名为Latent Consistency Models(LCMs)的新技术正迅速推动文本到图像人工智能的发展。与传统的Latent Diffusion Models(LDMs)相比,LCMs在生成详细且富有创意的图像方面同样出色,但仅需1-…...
成都瀚网科技有限公司抖音带货正规
随着互联网的蓬勃发展,越来越多的公司开始利用网络平台进行产品销售。其中,抖音作为一款广受欢迎的短视频平台,已经成为众多商家眼中的“香饽饽”。在这场电商狂欢中,成都瀚网科技有限公司(以下简称“瀚网科技”&#…...
php 8 注解的实际应用
前言 学过java的同学应该都知道注解的作用,但是在php中注解有什么用呢?我的理解就是美化代码和便于维护一些类的设计。 说明 我们先设计一个类,声明人类的性别 <?php class Sex {//男人const MAN 1;//女人const WIFE 2;//未知const…...
【数据结构】树与二叉树(十三):递归复制二叉树(算法CopyTree)
文章目录 5.2.1 二叉树二叉树性质引理5.1:二叉树中层数为i的结点至多有 2 i 2^i 2i个,其中 i ≥ 0 i \geq 0 i≥0。引理5.2:高度为k的二叉树中至多有 2 k 1 − 1 2^{k1}-1 2k1−1个结点,其中 k ≥ 0 k \geq 0 k≥0。引理5.3&…...
相机突然断电,保存的DAT视频文件如何打开
3-6 本文主要解决因相机突然断电导致拍摄的视频文件打不开的问题。 在平常使用相机拍摄视频,比如使用佳能相机拍摄视频的时候,如果电池突然断电,就非常有可能会导致视频没来得及保存而损坏的情况,比如会产生下图中的这种DAT文件…...
[西湖论剑 2022]real_ez_node
文章目录 前置知识EJS模板注入(CVE-2022-29078)原型链污染漏洞 (CVE-2021-25928)HTTP响应拆分攻击(CRLF) 解题过程代码审计构造payload 前置知识 EJS模板注入(CVE-2022-29078) EJS…...
无限视距:突破视野边界的内存调控技术解析
无限视距:突破视野边界的内存调控技术解析 【免费下载链接】R3nzSkin Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3n/R3nzSkin 副标题:提升37%战场信息获取效率的MOBA游戏增强方案 价值定位ÿ…...
Pixel 7 实战:从源码编译到刷入 Android 15 UserDebug 的避坑指南
1. 环境准备:避开依赖地狱的三大陷阱 第一次给Pixel 7编译Android 15 UserDebug版本时,我踩遍了所有能踩的坑。最让人崩溃的不是代码编译失败,而是环境配置这种本该简单的步骤。先说硬件要求:至少16GB内存200GB SSD,我…...
R语言中的loess函数:从原理到实战时序数据分析
1. 理解loess回归:从数学原理到生活场景 第一次接触loess函数时,我盯着金融数据里那些弯弯曲曲的折线图发愁——传统的线性回归画出来的直线根本抓不住股价的波动规律。这就像用直尺画蒙娜丽莎的微笑,技术没错,但完全不对味。loes…...
Qwen3.5-4B-Claude-Opus效果展示:Python回文函数生成+思路结构化呈现
Qwen3.5-4B-Claude-Opus效果展示:Python回文函数生成思路结构化呈现 1. 模型能力概览 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF是一个专注于推理和结构化分析的轻量级AI模型。这个经过特殊训练的版本在以下方面表现出色: 分步骤推理&…...
【Matlab】综合能源系统多能流优化调度
【Matlab】综合能源系统多能流优化调度 一、引言 在“双碳”目标与能源结构转型的双重驱动下,综合能源系统(Integrated Energy System, IES)作为整合电力、热力、天然气、冷能等多种能源形式的新型能源载体,凭借“多能互补、协同优化”的核心优势,成为破解能源供需矛盾、…...
新手入门:5分钟搞懂雷达中的Dwell Time和Hits per Scan(附计算公式)
雷达系统核心参数解析:从Dwell Time到Hits per Scan的实战指南 雷达技术作为现代探测系统的基石,其性能优劣往往取决于几个关键参数的精确配置。对于刚接触雷达领域的技术人员来说,理解这些参数的实际意义和相互关系,就像掌握了一…...
Pixel Language Portal入门必看:基于Hunyuan-MT-7B的怀旧风翻译工具从零搭建
Pixel Language Portal入门必看:基于Hunyuan-MT-7B的怀旧风翻译工具从零搭建 1. 项目介绍与核心价值 Pixel Language Portal(像素语言跨维传送门)是一款融合了复古游戏美学与现代AI翻译技术的创新工具。与传统翻译软件不同,它将…...
像素时装锻造坊实战教程:用Enchantment功能将文字描述转为像素咒语技巧
像素时装锻造坊实战教程:用Enchantment功能将文字描述转为像素咒语技巧 1. 像素时装锻造坊简介 像素时装锻造坊是一款基于Stable Diffusion与Anything-v5的图像生成工具,它将AI图像生成与复古日系RPG游戏界面完美结合。不同于传统AI工具的单调界面&…...
云容笔谈·东方红颜影像生成系统数据库课程设计案例:构建一个AI绘画作品社交平台
云容笔谈东方红颜影像生成系统数据库课程设计案例:构建一个AI绘画作品社交平台 最近几年,AI绘画技术发展得特别快,从最开始生成一些模糊的涂鸦,到现在能画出细节丰富、风格多样的精美作品,也就短短几年时间。很多同学…...
2026年西安市莲湖区Geo搜索优化排名,专业企业究竟谁能拔得头筹?
在数字化浪潮席卷的今天,Geo搜索优化(地理搜索优化)对于企业的重要性不言而喻。尤其在西安市莲湖区,企业们对于提升自身在Geo搜索中的排名需求愈发迫切。究竟哪家专业企业能够在2026年的竞争中脱颖而出,成为Geo搜索优化…...
