在Python中将一个列表的末尾添加到另一列表的末尾-Leetcode

时间:2020-06-13 22:01:07

标签: python list merge

我已成功解决有关Leetcode的问题#88,位于以下位置:https://leetcode.com/problems/merge-sorted-array/

该问题要求我们将nums2列表按升序就地合并到nums1中。

我正在尝试简化我的代码(如下)。我已经从原始解决方案(正常工作)中注释掉了代码的最后一部分。在此之上,我添加了一个“ if c2

我的新解决方案中的输出不正确:

[2,5,2,3,0,0,0]

正确的输出是:

[1,2,2,3,5,6]

输入:

nums1 = [1,2,3,0,0,0],m = 3,nums2 = [2,5,6],n = 3,其中m和n分别是nums1和nums2的长度

class Solution:
    def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:

        if not nums2:
            return
        c1 = 0
        c2 = 0
        while m > c1 and n > c2:
            if nums2[c2] <= nums1[c1]:
                nums1.insert(c1, nums2[c2])
                c2 += 1
                c1 += 1
                m += 1
            else:
                c1 += 1

        if c2 == n:
            del nums1[m:]
            return

    #  New code to add end of nums2 to end of nums1
        if c2 < n:
            nums1[:n-c2] = nums2[:n-c2]

    #   Old code to add end of nums2 to end of nums1
    #    while c2 < n:
    #        nums1[c1] = nums2[c2]
    #        c2 += 1
    #        c1 += 1

    #   delete trailing 0s
    #    del nums1[c1:]

对不起,如果我的代码丑陋,我是编程新手。

2 个答案:

答案 0 :(得分:0)

这是heapq.merge的解决方案:

from heapq import merge

class Solution:
    def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:        
        nums1[:] = merge(nums1[:m], nums2)

结果(来自Leetcode的屏幕截图):

enter image description here

答案 1 :(得分:0)

尝试一下:

import numpy as np

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

print("Input: ",nums1,nums2)

nums1 = nums1[:m]
nums2 = nums2[:n]

print("Step 1: ", nums1, nums2)
step2 = np.concatenate((nums1, nums2))

print("Step 2:", step2)
step3 = np.sort(step2)

print("Step3: ", step3)

输出为:

Input:  [1, 2, 3, 0, 0, 0] [2, 5, 6]
Step 1:  [1, 2, 3] [2, 5, 6]
Step 2: [1 2 3 2 5 6]
Step3:  [1 2 2 3 5 6]