码迷,mamicode.com
首页 > 编程语言 > 详细

Leetcode--合并两个有序数组(88)

时间:2020-06-04 21:44:49      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:class   元素   mat   http   mic   +=   col   strong   pytho   

题目描述:

给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 使 nums1 成为一个有序数组。

技术图片           技术图片

 

思路一:直接利用python中的sorted()函数

class Solution:
    def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
        nums1[:] = sorted(nums1[:m] + nums2)

时间复杂度:O((n+m)log(n+m)) 空间复杂度O(1)

思路二:利用数组的切片[:]

 1 class Solution:
 2     def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
 3         i,j = 0,0
 4         while (j < n and i < m+n):
 5             if nums1[i] < nums2[j]:
 6                 i += 1
 7             else:
 8                 nums1[i+1:] = nums1[i:m+n-1]
 9                 nums1[i] = nums2[j]
10                 i += 1
11                 j += 1
12         if j < n:   #考虑nums2还没遍历完的情况
13             nums1[m+j:] = nums2[j:]
14         

思路三:由于nums1数组最后几位均为0,因此从末尾开始改写nums1会有更小的空间复杂度。

 1 class Solution:
 2     def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
 3         i,j,k = m-1,n-1,m+n-1  
 4         #i指向nums1的最后一个非0元素,j指向nums2的最后一个元素,k指向nums1的末尾
 5         while(i>=0 and j>=0):
 6             if nums1[i] <= nums2[j]:
 7                 nums1[k] = nums2[j]
 8                 j -= 1
 9             else:
10                 nums1[k] = nums1[i]
11                 i -= 1
12             k -= 1
13         while(j >= 0):    #如果nums2没有被遍历完
14             nums1[j] = nums2[j]
15             j -= 1

时间复杂度O(m+n),空间复杂度O(1)

 

Leetcode--合并两个有序数组(88)

标签:class   元素   mat   http   mic   +=   col   strong   pytho   

原文地址:https://www.cnblogs.com/shawn-young/p/13046420.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!