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 @   Junior_bond  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示