我已成功解决有关Leetcode的问题#88,位于以下位置:https://leetcode.com/problems/merge-sorted-array/
该问题要求我们将nums2列表按升序就地合并到nums1中。
我正在尝试简化我的代码(如下)。我已经从原始解决方案(正常工作)中注释掉了代码的最后一部分。在此之上,我添加了一个“ if c2 我的新解决方案中的输出不正确: 正确的输出是: 输入: nums1 = [1,2,3,0,0,0],m = 3,nums2 = [2,5,6],n = 3,其中m和n分别是nums1和nums2的长度 对不起,如果我的代码丑陋,我是编程新手。[2,5,2,3,0,0,0]
[1,2,2,3,5,6]
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:]
答案 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的屏幕截图):
答案 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]