python实现,这个关键在于要求时间复杂度和空间复杂度为O(1),因此函数没有return,而且要在原来的数组上进行修改,关键在于想到用双指针从后往前循环,而且给定的原始列表是已经排序的,如果是没排序的又该怎么办下一次更新,以下是我的python代码:
首先是列表是排序的:
class solution:
def merge(self, nums1, m: int, nums2, n: int) -> None:
nums1_last,nums2_last=m-1,n-1
for i in range(n+m-1,-1,-1):
if nums2_last < 0:#最难的是这句想不到因为,变第二个如果第二个很快就消耗完了就不能再排了要不然就循环了
break
if nums1_last<0 or nums2[nums2_last]>nums1[nums1_last]:
nums1[i]=nums2[nums2_last]
nums2_last-=1
else:
nums1[i]=nums1[nums1_last]
nums1_last-=1
nums1=[1,2,3,0,0,0]
nums2=[2,5,6]
m=3
n=3
s=solution()
s.merge(nums1,m,nums2,n)
print(nums1)