美文网首页
LeetCode--合并两个有序数组(python版)

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

作者: 猫爱吃草莓 | 来源:发表于2018-12-25 10:45 被阅读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. 梳理边界情况,进行划分

    相关文章

      网友评论

          本文标题:LeetCode--合并两个有序数组(python版)

          本文链接:https://www.haomeiwen.com/subject/wqwxlqtx.html