【刷爆LeetCode_01题_合并两个有序数组】

算法题,好像是不让使用函数

一、题目

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。

1、用例

示例 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:def merge(self,nums1: List[int], m: int, nums2: List[int], n: int) -> None:nums1[:] =nums1[0:m]nums2[:] =nums2[0:n]nums3 = nums1[:] + nums2[:]nums1 = nums3.sort()

2)转化成列表,使用sort()函数

class Solution:def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:nums1[:] = nums1[0:m]nums2[:] = nums2[0:n]nums3 = nums1 + nums2nums1[:] = sorted(nums3)

3)双指针

def mergeArrays(nums1: List[int], m: int, nums2: List[int], n: int) -> None:i, j = m - 1, n - 1while i >= 0 and j >= 0:if nums1[i] > nums2[j]:nums1[i] += nums2[j]j -= 1else:nums1[i] += nums2[j]i -= 1nums1[:j+1] = nums2[:j+1]

三、解析

这段代码定义了一个名为`Solution`的类,并且包含一个名为`merge`的方法。这个方法接受四个参数:`nums1`、`m`、`nums2`和`n`。- `nums1`和`nums2`是两个整数列表,分别表示要合并的第一个列表和第二个列表。
- `m`和`n`分别是这两个列表的长度。在`merge`方法内部,首先使用切片操作符`[:]`将`nums1`和`nums2`的前部分(即长度为`m`和`n`的部分)复制到新的列表中,然后将这两个新列表连接起来形成一个新的列表`nums3`。最后,使用Python内置的`sorted`函数对`nums3`进行排序,并将排序后的结果赋值给`nums1`。这样就实现了将`nums1`和`nums2`合并并排序的功能。请注意,这里并没有返回任何值,因为这是一个“副作用”函数,它的作用是直接修改了输入的列表,而不是返回一个新的列表。

1、知识点

1)nums1: List[int]    ---名字是nums1的List(列表)类型的数据,列表里面都是int整数2)m: int    ----名字是m的int整数类型的数据3)nums1[:] = nums1[0:m]     ---[:]是切片操作符,表示nums1[:]是nums1列表从0到m长度的列表切片4) def merge(self, xxx) -> None:   ---表示这个函数没有返回值,或者说是返回值是none5)sort()函数:是操作list列表的函数

2、解题的关键点

1)最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。说明:需要把修改数据后的nums1给返回,而不是返回一个新的数组,本次操作需要修改的是nums12)

3、衍生知识点

1)python的列表和数组

在Python中,数组和列表(list)并不是完全相同的概念。虽然它们都可以用来存储一系列有序的数据,但它们之间还是有一些区别的。- 列表(list)是Python内置的一种数据结构,它可以包含任意类型的元素,并且支持动态增长(即可以随时添加或删除元素)。列表使用方括号`[]`来定义,元素之间用逗号`,`分隔。例如:
```python
my_list = [1, 'hello', 3.14]
```- 数组(array)则是另一种数据结构,它通常用于存储同一种类型的数据,并且支持高效的随机访问。Python标准库并没有提供直接支持数组的模块,但是可以通过第三方库如`numpy`来创建和操作数组。例如:
```python
import numpy as npmy_array = np.array([1, 2, 3])
```总的来说,如果你需要处理不同类型的数据或者需要动态增长,那么应该使用列表;而如果你需要处理大量同类型的数据,并且希望访问速度更快,那么应该考虑使用数组。

2)sort()函数

在Python中,`sort()`函数是列表(list)对象的一个内置方法,用于对列表进行排序。这个函数会直接修改原始列表,而不是返回一个新的排序后的列表。`sort()`函数的基本语法如下:
```python
list.sort(key=None, reverse=False)
```
其中:- `key`:可选参数,用于指定一个函数来确定排序顺序。默认情况下,`key`参数为`None`,此时按照元素本身的值进行排序。
- `reverse`:可选参数,用于指定是否要进行降序排序。默认情况下,`reverse`参数为`False`,表示升序排序。下面是一些示例:```python
# 对一个整数列表进行升序排序
numbers = [5, 2, 8, 1, 9]
numbers.sort()
print(numbers)  # 输出 [1, 2, 5, 8, 9]# 对一个字符串列表按照长度进行排序
words = ['apple', 'banana', 'cherry', 'date']
words.sort(key=len)
print(words)  # 输出 ['date', 'apple', 'banana', 'cherry']# 对一个整数列表进行降序排序
numbers = [5, 2, 8, 1, 9]
numbers.sort(reverse=True)
print(numbers)  # 输出 [9, 8, 5, 2, 1]
```请注意,`sort()`函数会直接修改原始列表,如果你不想改变原始列表,而是希望得到一个新的排序后的列表,可以使用`sorted()`函数。

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

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

相关文章

Oracle数据库的简单使用

Oracle简单使用 一、数据库的介绍二、Oracle介绍账号管理Oracle的安装Oracle服务的作用OracleRemExecService服务创建数据库 常用命令 三、SQL语言SQL分类实用的数据表添加注释数据操纵语言(DML)查询语句(SELECT)wherelikedistinc…

pycharm集成github项目,拉取项目并进行代码管理

首先你要有一个github项目,然后找到一个想要拉取github项目的本地路径,打开git命令行,执行git clone http…路径,可能会需要你输入git的用户名和密码;用pycharm打开该项目;添加python解释器,我用…

YOLOv8改进项目汇总-超全改进-ultralyticsPro介绍:订阅了《芒果YOLOv8原创改进专栏》的读者免费赠送,包括很多稀有改进

🔥🔥🔥专注于YOLOv8改进,NEW - YOLOv8 🚀 in PyTorch >, Support to improve Backbone, Neck, Head, Loss, IoU, LA, NMS and other modules🚀 Makes YOLOv8 improvements easy again 芒果出品 YOLOv8…

Linux中返回值0值与非零值问题

在学习Linux的过程中,尤其是使用C语言进行编程的过程中,常常会发现Linux系统中喜欢用int类型的0或者非0值作为返回值表示该调用函数操作的成功或者失败。而我们在算法编程或者使用C编程的过程中,往往喜欢使用bool值表示一个操作的成功或者失败…

上汽大通:依托电子签网络,升级产业供应链协同

2023年12月,法大大发布了中国首部《汽车行业合同数智化白皮书》(点击阅读及下载:中国首部!《汽车行业合同数智化白皮书》重磅发布 | 附下载)。该白皮书中基于法大大自身参与汽车行业合同数智化建设的实践和思考&#x…

防反接、防过压、缓启动电路相关

一、防反接电路 电源正确接入时 电流从 VIN 端流向负载,经由 Q3(NMOS) 通向地(GND)。在上电瞬间,由于 MOS 管的体二极管效应,地回路通过体二极管接通。接下来,由于 Vgs(门源电压)大于 Vgsth(门限电压)&…

Neo4j图数据库

一、语句 (1)查看节点和节点间的关系 MATCH (n) RETURN n LIMIT 10000

【python】python新闻文本数据统计和聚类 (源码+文本)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

Bentley二次开发教程02-开发环境搭建

1 Bentley 平台介绍 图 1 Bentley 平台介绍 Bentley 软件大致可分为四大平台,分别为用于设计的 Microstation 平台,用于协同的 ProjectWise 平台,用于对资产进行全生命周期管理的 AssetWise 平台和数据互联互通的 数字孪生平台 iTwin。 1.1 …

Linux文件系统与日志

一、inode和block 文件数据包括元信息与实际数据,文件存储在硬盘上,硬盘最小存储单位是扇区,每个扇区存储512字节 1.block(块):文件系统中用于存储文件实际数据的最小单位,由文件系统进行分配和管理,并通…

【电子通识】什么是8D分析法?8D步骤及用法?

在问题分析时往往会听到8D报告这样的词汇。如在电源专题【电源专题】案例:电源芯片厂家怎么判断电源芯片端口是否损坏中我们使用的图片就来源于电源芯片厂家的8D报告。 什么是8D分析法? 8D问题分析由美国国防部于1974年创立,当时用于军用物资采购保障。目前在汽车产业、组装…

项目开发中的注意事项,帮你少走很多弯路,必读!!

项目开发过程中,为确保项目的顺利进行和最终成功,需要注意以下事项: 1. 明确项目目标与范围 清晰定义项目目标:确保所有团队成员对项目要达成的目标有统一认识,避免目标模糊导致的方向偏离。严格控制项目范围&#x…

MapReduce案例-电影网站数据统计分析

本文适合大数据初学者学习MapReduce统计分析业务问题的步骤和基础的MapReduce编程方法,初步掌握Hadoop对计算任务的管理。 本文末尾有全部数据集和完整代码连接。 1.准备工作 安装Hadoop:Hadoop 3.3.2 离线安装-CSDN博客 按照好Hadoop之后要检查一下datanode运行情况…

在控制台实现贪吃蛇

在控制台实现贪吃蛇 前备知识Win32APICOORD这个结构体的声明如下:GetStdHandle 函数GetConsoleCursorInfo 函数SetConsoleCursorInfo 函数 SetConsoleCursorPosition 函数getAsyncKeyState 函数 控制台窗口的大小以及字符打印介绍控制台中的坐标宽字符及本地化介绍s…

从0到1学习typescript(更新版)

1、常用ts基本命令 (1)下载 npm install typescript -g(2)检查ts版本 tsc -v(3)将ts编译为js tsc index.ts2、定义变量 首先要明确一个概念,ts中确定了类型之后,就不能再修改类…

SRS服务接入华为云CDN

CDN简介: CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输得更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网…

SSH远程连接docker容器-Linux-SSH -L 打隧道

问题:在物理机上用podman创建了一个容器,想SSH直接远程连接docker容器 解决方式: 步骤1: 在本地terminal输入以下命令: ssh -L 容器端口号:localhost:容器端口号 物理机用户名物理机ip -p 物理机端口号 即可,可新打…

centos7+mysql57安装以及初始化

1、下载安装yum官方mysql源: http://repo.mysql.com/ ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/061472a86e9e4548b76d4603d4614568.png rpm -ivh mysql57-community-release-el7.rpm2、yum安装mysql服务 yum install -y mysql-community-server…

423 世界读书日 和京东零售技术人一起读好书

我们正处于一个复杂、变化的世界,想要更好地理解、适应它,读书可能是最方便的方式之一。 4 月 23 日世界读书日,我们整理了 10 位零售技术人的书籍推荐给大家,欢迎大家一起来共读好书。愿大家在忙碌工作之余,都能够持…

从0到1实现RPC | 接入Apollo配置中心

一、代码实现 添加依赖 添加apollo客户端的依赖和spring配置相关依赖 添加监听器 通过实现ApplicationContextAware接口,获取Spring上下文。 使用ApolloConfigChangeListener注解监听命名空间rpc-demo-provider.yaml和默认的application.properties。 监听逻辑…