0088. 合并两个有序数组

0088. 合并两个有序数组 #

  • 标签:数组、双指针
  • 难度:简单

题目大意 #

给定两个有序数组 nums1nums2。将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。

其中给定数组 nums1 空间大小为 m + n 个,其中前 m 个为 nums1 的元素。nums2 空间大小为 n。这样可以用 nums1 的空间来存储最终的有序数组。

解题思路 #

将两个指针 index1、index2 分别指向 nums1、nums2 元素的尾部,再用一个指针 index 指向数组 nums1 的尾部。从后向前判断当前指针下 nums1[index1] 和 nums[index2] 的值大小,将较大值存入 num1[index] 中,然后继续向前遍历。最后再将 nums 中剩余元素赋值到 num1 前面对应位置上。

代码 #

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
class Solution:
    def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
        index1 = m - 1
        index2 = n - 1
        index = m + n - 1
        while index1 >= 0 and index2 >= 0:
            if nums1[index1] < nums2[index2]:
                nums1[index] = nums2[index2]
                index2 -= 1
            else:
                nums1[index] = nums1[index1]
                index1 -= 1
            index -= 1

        nums1[:index2+1] = nums2[:index2+1]
本站总访问量  次  |  您是本站第  位访问者