LeetCode--合并两个有序数组(python版)

2018-12-25  本文已影响0人  猫爱吃草莓
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)。
重点:

  1. 使用while需要明确终止条件
  2. 梳理边界情况,进行划分
上一篇下一篇

猜你喜欢

热点阅读