算法题,好像是不让使用函数
一、题目
给你两个按 非递减顺序 排列的整数数组 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()`函数。