Leetcode--合并两个有序数组(88)
Posted 神的孩子都在跳舞
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode--合并两个有序数组(88)相关的知识,希望对你有一定的参考价值。
题目描述:
给你两个有序整数数组 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)的主要内容,如果未能解决你的问题,请参考以下文章