这是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]
答案 0 :(得分:1)
您的代码,包括文档字符串:
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[:] = ...
并不是分配给本地变量,而是分配给它引用的列表的 content 。以便确实根据需要修改给定的列表对象。