leedcode 合并两个有序数组 切片 原地修改

使用 nums1[:m + n] = nums1_new 时,这是在原地修改 nums1 列表。
具体来说,这个语句使用切片将 nums1 中前 m + n 个元素替换为 nums1_new 中的元素。
这样做的结果是,nums1 的原始内存空间被修改,而不是创建一个新的列表对象。

使用 nums1 = nums1_new,这将创建一个新的列表对象,并让 nums1 这个变量指向这个新的对象。
原始的 nums1 列表对象将被丢弃(可能在后续的垃圾回收中被清理)。

在 Python 中,对列表使用切片和赋值,例如 nums1[:m + n] = nums1_new,是一种原地修改列表的方法。
这意味着你修改的是原始列表对象,而不是创建一个新的对象。这对于节省内存和避免不必要的对象创建是有利的。

 

class Solution:
    def merge(self, nums1, m, nums2, n) :
        """
        Do not return anything, modify nums1 in-place instead.
        """
        nums1_new=nums1[:m]
        nums2_new=nums2[:n]



        num = nums1_new+nums2_new
        num.sort()
        nums1.clear()
        for i in range(len(num)):
            nums1.append(num[i])
        print(nums1)

 从尾巴开始的归并排序

class Solution(object):
    def merge(self, nums1, m, nums2, n):
        # 计算合并后的数组的末尾索引
        k = m + n - 1
        
        # 当两个数组均还有元素未比较时,进行合并
        while m > 0 and n > 0:
            # 如果 nums1 中的元素较大,则将其放入合并后的数组的末尾
            if nums1[m - 1] > nums2[n - 1]:
                nums1[k] = nums1[m - 1]
                m -= 1
            else:
                # 如果 nums2 中的元素较大,则将其放入合并后的数组的末尾
                nums1[k] = nums2[n - 1]
                n -= 1
            # 向前移动合并后的数组的末尾索引
            k -= 1
        
        # 如果 nums2 中还有未合并的元素,将其复制到合并后的数组的前面
        nums1[:n] = nums2[:n]

 

posted @ 2024-02-01 16:51  Junior_bond  阅读(16)  评论(0)    收藏  举报