zoukankan      html  css  js  c++  java
  • LeetCode 88. 合并两个有序数组

    88. 合并两个有序数组

    Difficulty: 简单

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

    初始化 nums1nums2 的元素数量分别为 mn。你可以假设 nums1的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。

    示例 1:

    输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
    输出:[1,2,2,3,5,6]
    

    示例 2:

    输入:nums1 = [1], m = 1, nums2 = [], n = 0
    输出:[1]
    

    提示:

    • nums1.length == m + n
    • nums2.length == n
    • 0 <= m, n <= 200
    • 1 <= m + n <= 200
    • -10<sup>9</sup> <= nums1[i], nums2[i] <= 10<sup>9</sup>

    Solution

    这道题给定的两个数组是有序的,初始化三个指针ijk,从两个数组的最后一个元素开始比较,如果nums1的指针i指向的元素大于等于nums2指针j指向的元素,那么把nums1指向的元素放在nums1数组的最后位置,否则把nums2指针指向的元素放在最后。最后nums1或者nums2只有一个数组可能剩余元素没有比较完,如果nums1剩余元素那么就不用管了,如果nums2剩余元素,那么意味着nums2的元素可以全部放在nums1剩余的位置。

    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.
            """
            i, j, k = m - 1, n - 1, m + n - 1
            while i >= 0 and j >= 0:
                if nums1[i] >= nums2[j]:
                    nums1[k] = nums1[i]
                    i -= 1
                else:
                    nums1[k] = nums2[j]
                    j -= 1
                k -= 1
            if j >= 0:
                nums1[:j+1] = nums2[:j+1]
    
  • 相关阅读:
    在C#中使用官方驱动操作MongoDB
    【C#设计模式-抽象工厂模式】
    【MongoDB-MongoVUE图像管理工具】
    【MongoDB-query查询条件】
    【MongoDB学习-安装流程】
    【MongoDB学习-在.NET中的简单操作】
    【MongoDB】2.可视化工具的安装和使用
    越狱Season 1-Episode 12:Odd Man Out
    越狱Season 1-Episode 11: And Then There Were 7-M
    越狱Season 1-Episode 10: Sleight of Hand
  • 原文地址:https://www.cnblogs.com/swordspoet/p/14618319.html
Copyright © 2011-2022 走看看