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]

浙公网安备 33010602011771号