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

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. 梳理边界情况,进行划分
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。