双指针指两尾
大的放nums1最后
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.
"""
if set(nums1) == {0}:
nums1[:] = nums2
return nums1
elif nums2 == []:
return nums1
cur1 = m - 1
cur2 = n - 1
cur = m + n - 1
minimum = min(nums1[0],nums2[0]) - 1
while cur1 >= 0 or cur2 >= 0:
val1 = nums1[cur1] if cur1 >= 0 else minimum
val2 = nums2[cur2] if cur2 >= 0 else minimum
if val2 >= val1:
nums1[cur] = val2
cur2 -= 1
else:
nums1[cur] = val1
cur1 -= 1
cur -= 1
思路见我的另一篇题解
https://blog.csdn.net/weixin_41545780/article/details/105474649
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.
"""
indexa = 0
indexb = 0
while indexa < m and indexb < n:
if nums2[indexb] < nums1[indexa]:
self.houyiyiwei(nums1,indexa,m)
m += 1
nums1[indexa] = nums2[indexb]
indexb += 1
else:
indexa += 1
if indexb < n:
length = n - indexb
for i in range(length):
thisindex = i + indexa
nums1[thisindex] = nums2[indexb]
indexb += 1
def houyiyiwei(self,inputlist,startindex,m):
length = len(inputlist)
for i in range(m - 1,startindex-1,-1):
inputlist[i+1] = inputlist[i]