m
,num2 长度为n
,合并元素为num1的前m
个与num2的前n
个In computer science, an in-place algorithm is an algorithm
which transforms input using no auxiliary data structure.
aka 对num1、num2直接操作,不使用额外变数(记忆体)来辅助来取得结果
非in place版-直观解
使用额外变数tmpList
放m
个到tmpList
再放n
个到tmpList
清空nums1
➔ .clear()
Copy tmpList
to nums1
进行sort ➔ .sort()
非in place版-merge sort の merge
两个指针 i
, j
初始分别指向num1与num2的第0个位置,比较值的大小(由小的开始放),
放入较小的元素进辅助变数(ans
),直到num1
或num2
的结尾,
也就是 i
或j
已指到end of array
aka i
指到m-1
或j
指到n-1
接着放另一个还未到结尾的array进ans
。
清空nums1
➔ .clear(),
回圈法将ans
中的每个元素加入nums1
。
in place版-参考Discuss神人解
两阵列取大放(m+n-1)位置,被取的往前(往值小)移动,
同一时间最终合并阵列-num1的(m+n-1)值会往前移,直到num2的元素用完(n为0)。
class Solution:
def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
tmpList = []
for i in range(m):
tmpList.append(nums1[i])
for j in range(n):
tmpList.append(nums2[j])
nums1.clear()
for k in range(m+n):
nums1.append(tmpList[k])
nums1.sort()
print(nums1)
class Solution:
def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
i = 0
j = 0
ans = []
while i<m and j<n:
if nums1[i]<nums2[j]:
ans.append(nums1[i])
i+=1
else:
ans.append(nums2[j])
j+=1
print("i-j",i,j)
while i<=(m-1):
ans.append(nums1[i])
i+=1
while j<=(n-1):
ans.append(nums2[j])
j+=1
nums1.clear()
for k in ans:
nums1.append(k)
More Info. Python Program for Iterative Merge Sort
class Solution:
def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
"""
Do not return anything, modify nums1 in-place instead.
"""
while n:
if m and nums1[m-1]>nums2[n-1]:
nums1[m+n-1] = nums1[m-1]
m-=1
else:
nums1[m+n-1] = nums2[n-1]
n-=1
More Info. Beautiful Python Solution/Comments/@clarencechee
Easy
<<: Day 05 JavaScript 同步(Sync) vs 非同步(Async)处理
>>: Day20:安全性和演算法-杂凑函数(hash function)
在开始今天的主题前,虽然在前面介绍 Slate 时已经有稍微提到过了,我们还是先从 slate 的...
这是我第一次参加铁人赛,如果内容有不清楚或有误欢迎大家指正,影片皆是我自学Unity并且规划的教学内...
前言 今天要来接续制作表单,会以昨天的内容再延伸出更多新的功能。 UserSettingForm 昨...
CocoaPods CocoaPods 是一款第三方套件的相依管理器,我们可以透过它来安装许多第三方...
...为什麽 PHP 的变数宣告要使用 $ 符号?...PHP 在变数前使用 $ 的用意是提醒开发...