class Solution(object):
def merge(self, nums1, m, nums2, n):
"""
:type nums1: List[int]
:type m: int
:type nums2: List[int]
:type n: int
:rtype: void Do not return anything, modify nums1 in-place instead.
"""
k=0
i=m-1
j=n-1
while(j>=0):
if i<0:
nums1[0:j+1]=nums2[0:j+1]
break
if nums1[i]<nums2[j]:
nums1[m+n-1-k]=nums2[j]
j=j-1
else:
nums1[m+n-1-k]=nums1[i]
i=i-1
k=k+1
剛開始的想法是從頭遍歷兩個數(shù)組如果數(shù)組2有較大值就插入值數(shù)組1中拯欧,但是這樣數(shù)組1中的后續(xù)元素都要后移一位详囤,數(shù)組中移動元素成本太高,時間復(fù)雜度肯定大镐作,就打消了這個念頭藏姐,但是也想不到其他的好方法。后來只能求助萬能的互聯(lián)網(wǎng)该贾,看到別人的解法豁然開朗羔杨,重點就是從后遍歷兩個數(shù)組,這樣就不需要移動數(shù)組元素杨蛋,只需要替換就可以兜材。時間復(fù)雜度應(yīng)該是O(n)理澎,因為沒有使用額外的空間,所以空間復(fù)雜度應(yīng)該是O(1)曙寡。
重點:
- 使用while需要明確終止條件
- 梳理邊界情況糠爬,進(jìn)行劃分