【刷爆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 + nums2
        nums1[:] = sorted(nums3)

3)双指针

def mergeArrays(nums1: List[int], m: int, nums2: List[int], n: int) -> None:
    i, j = m - 1, n - 1
    while i >= 0 and j >= 0:
        if nums1[i] > nums2[j]:
            nums1[i] += nums2[j]
            j -= 1
        else:
            nums1[i] += nums2[j]
            i -= 1
    nums1[: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:   ---表示这个函数没有返回值,或者说是返回值是none

5)sort()函数:是操作list列表的函数

2、解题的关键点

1)最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。

说明:需要把修改数据后的nums1给返回,而不是返回一个新的数组,本次操作需要修改的是nums1

2)

3、衍生知识点

1)python的列表和数组

在Python中,数组和列表(list)并不是完全相同的概念。虽然它们都可以用来存储一系列有序的数据,但它们之间还是有一些区别的。

- 列表(list)是Python内置的一种数据结构,它可以包含任意类型的元素,并且支持动态增长(即可以随时添加或删除元素)。列表使用方括号`[]`来定义,元素之间用逗号`,`分隔。

例如:
```python
my_list = [1, 'hello', 3.14]
```

- 数组(array)则是另一种数据结构,它通常用于存储同一种类型的数据,并且支持高效的随机访问。Python标准库并没有提供直接支持数组的模块,但是可以通过第三方库如`numpy`来创建和操作数组。

例如:
```python
import numpy as np

my_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.mfbz.cn/a/567725.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

书生·浦语大模型实战营之OpenXLab 部署 InternLM2 实践指南

书生浦语大模型实战营之OpenXLab 部署 InternLM2 实践指南 本文档将手把手教您如何在 OpenXLab 部署一个 InternLM2-7B chat 的应用 目录 资料介绍书生浦语 InternLM介绍OpenXLab浦源平台介绍部署 InternLM2-Chat-7B demo模型准备上传模型编写代码部署应用 资料介绍 书生浦语…

揭开ChatGPT面纱(1):准备工作(搭建开发环境运行OpenAI Demo)

文章目录 序言:探索人工智能的新篇章一、搭建开发环境二、编写并运行demo1.代码2.解析3.执行结果 本博客的gitlab仓库:地址,本博客对应01文件夹。 序言:探索人工智能的新篇章 随着人工智能技术的飞速发展,ChatGPT作为…

GITHUB的VB代码无法加载的问题解决

GITHUB里有不少好的VB代码,但是下载之后,经常出现工程加载出错的问题,例如: LOG文件为: 不能加载 0 行 0: 不能加载文件 D:\xxxx\Semi VB API Loader\frmMain.frm 。 原因其实很简单,github里的换行符是u…

OpenFE:开启数据特征工程新时代

OpenFE:开启数据特征工程新时代 数据特征工程是机器学习和数据分析领域中至关重要的一环,它涉及对原始数据进行处理和转换,以提取出有用的特征,为模型构建和预测提供更好的输入。在这个领域中,Python库OpenFE为数据科学…

高级控件4:Spinner

Spinner下拉列表组件 主要集合ArrayAdapter、SimpleAdapter以及自定义的Adapter(继承自BaseAdapter)配合使用实现下拉选择或者对话框中选择某一条目。下拉使用的更多,所以,接下来的案例也会重在演示下拉效果。 本次基本就是上代…

深入理解高级加密标准(Advanced Encryption Standard)

title: 深入理解高级加密标准(Advanced Encryption Standard) date: 2024/4/23 20:04:36 updated: 2024/4/23 20:04:36 tags: AES概述加密原理优势特点算法详解安全性应用实践案例分析 第一章:AES概述 AES的历史和背景 历史: 高…

【八股文】Spring 谈谈你对AOP的理解

AOP AOP(Aspect-Oriented Programming,面向切面编程):是一种新的方法论,是对传统 OOP(Object-Oriented Programming,面向对象编程)的补充。 面向对象是纵向继承,面向切面是横向抽取。 OOP思想是一种垂直纵向的继承体…

上网行为管理软件怎么选 三款好用的上网行为管理软件

上网行为管理软件怎么选 三款好用的上网行为管理软件 一款优秀的上网行为管理软件可以满足企业的多种需求,帮助企业有效监督员工的行为,提升工作效率和企业效益,但是这些软件差异较大,选择的时候需要考虑这些因素。 1、明确需求 …

基于一款最多能够支持10000路的 modbus RS485 led灯光控制板做灯控程序

背景 介绍一款之前用过的一款设备,基于RS485通讯协议,控制LED灯或RGB灯带。 设备介绍 之前用它来做智能中药柜的灯控板,结合物联网网关,modbus采集,mqtt转发,以及mqtt的rpc指令下发 设备图片 功能说明 …

Java基本语法(基础部分)

Java基本语法 文章目录 Java基本语法前言一、准备工作1.1 计算机软件与硬件1.2 计算机编程语言1.3 Java语言概述&程序分析1.4 Java环境搭建&Java API1.5 Java核心机制JVM 二、变量2.1 关键字&标识符2.2 变量2.3 数据类型(基本数据类型)2.3.1 基本数据类型2.3.2 基本…

互联网营销两大宗师:周鸿祎和雷军做个人IP有什么不同?

前几天周鸿祎说要把自己的迈巴赫卖了,准备换国产新能源,还喊话让各个车企给他送车去体验。不少车企都送去了自己的最新车型,只有雷军直接回答,“等SUV出”。我们是在吃瓜,作者却是从中看到了新老营销宗师的手法不同。 最近,在纪念互联网30周年的座谈会上,发生了一件趣事…

JAVA网络编程、项目验证码实现

什么是网络编程? 在网络通信协议下,不同计算机上运行的程序,进行的数据传输。 应用场景:即时通信、网游对战、金融证券、国际贸易、邮件、等等 不管是什么场景,都是计算机跟计算机之间通过网络进行数据传输 Java中可以使用ja…

wordpress建网站主题案例推荐

wordpress企业网站主题案例 https://www.mymoban.com/wordpress/ wordpress公司官网主题案例 https://www.wowsoho.com/jianzhan wordpress外贸主题案例 https://www.wpniu.com/moban

一维递归:递去

示例&#xff1a; /*** brief how about recursive-forward-1? show you here.* author wenxuanpei* email 15873152445163.com(query for any question here)*/ #define _CRT_SECURE_NO_WARNINGS//support c-library in Microsoft-Visual-Studio #include <stdio.h>…

深度学习-数据操作

目录 张量通过shape属性访问张量的形状通过shape属性访问张量中元素的总数reshape改变张量的形状&#xff08;不改变元素数量和元素值&#xff09;使用全0、全1、其他常量或者从特定分布中随机采样的数字通过提供包含数值的Python列表为所需张量中的每个元素赋予确定值。张量的…

记录交叉编译环境配置--海思开发板的 嵌入式nginx和 php的移植

嵌入式 lnmp搭建的记录 一些交叉编译的配置环境思路分享&#xff1a;P&#xff1a;php编译PHP可能遇到的问题configure阶段&#xff1a;Makefile-make阶段&#xff1a;Makefile-make install阶段&#xff1a; N&#xff1a;Nginx 文章比较水&#xff0c;并没有没解决什么实际问…

导出JVM的线程信息

1. 查询出Java应用的进程的PID ps -ef|grep java 此时的PID是 33 2. 使用JDK自带的工具jstack导出日志 jstack -l 33 > 2022jstack.log 3.然后直接下载

自动备份的小软件

自动备份的小软件 前几天有个小姐姐和我说&#xff0c;他的硬盘坏了&#xff0c;但是他有没有备份&#xff0c;所以我决定做一个自动备份的软件。 软件整体是使用pythonpyqt5做到。 github链接 软件截图 使用效果 使用方法 教程 流程图 优势 可以很大程度上解决数据丢失…

平均月薪超4.6万!AI领域重磅课程汇总,哈佛,斯坦福,微软,谷歌等出品!

2023年底&#xff0c;由脉脉高聘人才智库发布的《2023泛人工智能人才洞察》报告显示&#xff0c;2023年前八个月内新发布的AI岗位平均月薪超过了4.6万元&#xff0c;而且人才供不应求&#xff0c;甚至出现了5个岗位争夺2个人才的情况。 本文章整理了10项来自全球各高校与知名企…

手把手教数据结构与算法:有序线性表设计

问题描述 设计一个有序线性表类&#xff0c;要求完成初始化&#xff0c;插入和遍历功能&#xff0c;使得表内元素实现有序排列&#xff08;从小到大&#xff09;。同时实现合并功能&#xff0c;使得两个线性表能够合并为一个线性表&#xff08;可能存在重复元素&#xff09;。…