在Python中合并具有指定长度的排序数组(最佳实践)

0 投票
2 回答
44 浏览
提问于 2025-04-13 18:16

我在练习写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

撰写回答