在leetcode中合并排序数组:列表的就地修改不起作用

时间:2016-08-01 18:44:34

标签: python arrays

问题的链接:merge sorted array

我不知道为什么我的解决方案在退出函数合并时不会修改列表nums1。这是代码:

def merge(self, nums1, m, nums2, n):
    """
    :type nums1: List[int]
    :type m: int
    :type nums2: List[int]
    :type n: int
    :rtype: void Do not return anything, modify nums1 in-place instead.
    """
    i = 0
    j = 0
    while i < m and j < n:
        if nums1[i] < nums2[j]:
            i += 1
        else:
            nums1 = nums1[:i-1] + [nums2[j]] + nums1[i-1:]
            i += 1
            j += 1
    if i == m:
        nums1 = nums1 + nums2

2 个答案:

答案 0 :(得分:1)

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[:]=nums1[:m]
    for num in nums2:
        nums1.append(num)
    
    nums1[:]=sorted(nums1[:m+n])

答案 1 :(得分:0)

列表是可变的,因此您可以创建您要查找的行为。您需要做的是为nums1中的特定索引分配新值。使用拼接时,实际上是在创建新列表。使用[].insert()[].pop()[].extend()等列表函数来实现您正在寻找的功能。