在Python中合并具有指定长度的排序数组(最佳实践)
我在练习写Python算法的时候,在Leetcode上遇到了一个有趣的情况。
任务是:“你有两个整数数组nums1和nums2,它们是按非递减顺序排列的,还有两个整数m和n,分别表示nums1和nums2中的元素数量。”结果应该存储在nums1中(nums1的长度是m+n,其中n表示那些应该从nums1中忽略并从nums2中添加的元素)。
我想出了一个最简单的解决方案,在VSCode中能得到预期的结果,但在LeetCode上却没有通过测试用例。
我在想,为什么会这样呢……我漏掉了什么吗?
`class Solution(object):
def merge(self, nums1, m, nums2, n):
"""
:type nums1: List[int]
:type m: int
:type nums2: List[int]
:type n: int
:rtype: None Do not return anything, modify nums1 in-place instead.
"""
nums1 = sorted(nums1[0:m] + nums2[0:n])
nums1 = [1, 2, 3, 0, 0, 0]
m = 3
nums2 = [2, 5, 6]
n = 3
solution = Solution()
result = solution.merge(nums1, m, nums2, n)
print(result)`
请注意,我是个初学者。可能我没有考虑到一些重要的东西。我猜可能是因为我不明智地更新了nums1,导致我丢失了关于数组的信息,但还有其他原因吗?
我找不到LeetCode上测试用例的代码来理解问题出在哪里。也许有人能帮我,告诉我该去哪里找这些信息?
2 个回答
0
你需要直接在 nums1
这个列表上进行修改,所以可以对整个列表进行赋值。
nums1[:] = sorted(nums1[:m] + nums2)
注意,这个问题可以在不对整个列表进行排序的情况下,用时间复杂度 O(n + m)
来解决。
0
sorted
这个函数会生成一个新的列表,但这个解决方案需要直接修改现有的nums1
变量。
> origin_list = [3,2,1]
> origin_list
[3, 2, 1]
> answer = sorted(origin_list)
> answer
[1, 2, 3]
> answer is origin_list
False
在你的解决方案中,尝试使用列表的一些方法,比如:pop()
和append(...)
。
注意评论中的内容:不要返回任何东西,而是直接修改nums1
。