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
刚开始的想法是从头遍历两个数组如果数组2有较大值就插入值数组1中,但是这样数组1中的后续元素都要后移一位,数组中移动元素成本太高,时间复杂度肯定大,就打消了这个念头,但是也想不到其他的好方法。后来只能求助万能的互联网,看到别人的解法豁然开朗,重点就是从后遍历两个数组,这样就不需要移动数组元素,只需要替换就可以。时间复杂度应该是O(n),因为没有使用额外的空间,所以空间复杂度应该是O(1)。
重点:
- 使用while需要明确终止条件
- 梳理边界情况,进行划分
网友评论