Leetcode 88 合并排序数组 Python3 切片问题



这是leetcode问题:

给定两个排序整数数组 nums1 和 nums2,将 nums2 合并为 nums1 作为一个排序数组。

注意:

在 nums1 和 nums2 中初始化的元素数分别为 m 和 n。 您可以假设 nums1 有足够的空间(大小大于或等于 m + n(来容纳 nums2 中的其他元素。 例:

输入: nums1 = [1,2,3,0,0,0], m = 3 nums2 = [2,5,6], n = 3

输出: [1,2,2,3,5,6]

https://leetcode.com/problems/merge-sorted-array/

我的问题是"残酷力量1"和"残酷力量2"中的"nums1"和"nums1[:]"有什么区别?

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.
"""
nums1=sorted(nums1[0:m]+nums2[0:n])
return nums1

返回,这是不正确的。

Your input
[1,2,3,0,0,0]
3
[2,5,6]
3
Output
[1,2,3,0,0,0]
Expected
[1,2,2,3,5,6]

解决方案 2,这是正确的

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.
"""
nums1[:]=sorted(nums1[0:m]+nums2[0:n])
return nums1[:]

Your input
[1,2,3,0,0,0]
3
[2,5,6]
3
Output
[1,2,2,3,5,6]
Expected
[1,2,2,3,5,6]

您的代码,包括文档字符串:

def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
"""
Do not return anything, modify nums1 in-place instead.
"""
nums1=sorted(nums1[0:m]+nums2[0:n])
return nums1

不确定"不要归还任何东西">的哪一部分激发了你归还的东西:-(

显然,法官很好,不介意你归还一些东西,但它肯定会忽略你归还的任何东西。此外,使用nums1 = my_new_list_object,您只将局部变量重新分配给新创建的列表对象,则根本不会修改给定的列表对象。所以法官甚至看不出你做了什么

另一方面,使用nums1[:] = ...,您不是分配给局部变量,而是分配给它引用的列表的内容。因此,这确实会根据需要修改给定的列表对象。

最新更新