突然想起来,nums1数组后面都是空的,merge时可以往后面堆。要是往前面insert,速度肯定不行了。
可惜提交时忘了最后一行
r-=1. 老是比较粗心。
在Python3我估计能够用一种for loop的写法,同时deduct两个变量。
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.
"""
p = m-1
q = n-1
r = m+n-1
# compare from back to the begining
# filling the holes
while p>=0 and q>=0:
if nums1[p] > nums2[q]:
# move nums1
nums1[r] = nums1[p]
p -= 1
else:
# insert nums2[q] into nums1
nums1[r] = nums2[q]
q -= 1
r -= 1
# copy the rest of nums2 to nums1, nums1 is done
while q>=0:
nums1[r] = nums2[q]
q -= 1
r -= 1
果然是有同时loop多个变量的for loop,不过好像也不是很可读。
要用zip()把两个range,合并成一个iteratable.
(9, 8)
(8,7)
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.
"""
p = m-1
q = n-1
r = m+n-1
# compare from back to the begining
# filling the holes
while p>=0 and q>=0:
if nums1[p] > nums2[q]:
# move nums1
nums1[r] = nums1[p]
p -= 1
else:
# insert nums2[q] into nums1
nums1[r] = nums2[q]
q -= 1
r -= 1
# copy the rest of nums2 to nums1, nums1 is done
for x,y in zip(range(q,-1,-1), range(r,-1,-1)):
nums1[y] = nums2[x]