leetcode 88合并排序数组python3切片问题

时间:2020-02-09 23:40:29

标签: python-3.x list sorting slice

这是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]

1 个答案:

答案 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 。以便确实根据需要修改给定的列表对象。