算法第二十三天-合并两个有序数组

合并两个有序数组

题目要求

算法第二十三天-合并两个有序数组_第1张图片

解题思路

方法一、先合并,后排序

直接利用Python自带的语句进行合并和排序

方法二、双指针

方法一没有利用到原数组有序的性质
利用双指针,可以有效减少时间

代码

方法一

class Solution:
    def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
        """
        Do not return anything, modify nums1 in-place instead.
        """
        nums1[m:]=nums2
        nums1.sort()

方法二

class Solution:
    def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
        """
        Do not return anything, modify nums1 in-place instead.
        """
        index1,index2=0,0
        res=[]
        while index1<m or index2<n:
            if index1==m:
                res.append(nums2[index2])
                index2 +=1
            elif index2==n:
                res.append(nums1[index1])
                index1 += 1
            elif nums1[index1]<nums2[index2] :
                res.append(nums1[index1])
                index1 +=1
            else:
                res.append(nums2[index2])
                index2 +=1
        nums1[:]=res

复杂度分析

方法一、
时间复杂度: O ( ( N + M ) ∗ l o g ( m + n ) ) O((N+M) * log(m+n)) O((N+M)log(m+n)),排序序列长度为(M+N),直接套用快速排序的时间复杂度即可
空间复杂度: O ( l o g ( N + M ) ) O(log(N+M)) O(log(N+M))
方法二、
时间复杂度: O ( N + M ) O(N+M) O(N+M)
空间复杂度: O ( N + M ) O(N+M) O(N+M)

你可能感兴趣的:(算法基础,算法,python,leetcode)