LeetCode 88. 合并两个有序数组 Merge Sorted Array

简介: LeetCode 88. 合并两个有序数组 Merge Sorted Array

LeetCode 88. 合并两个有序数组 Merge Sorted Array


Table of Contents

一、中文版

二、英文版

三、My answer

四、解题报告


一、中文版

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

 

说明:

初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。

你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。

 

示例:

输入:

nums1 = [1,2,3,0,0,0], m = 3

nums2 = [2,5,6],       n = 3

输出: [1,2,2,3,5,6]


二、英文版

Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.
Note:
The number of elements initialized in nums1 and nums2 are m and n respectively.
You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2.
Example:
Input:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6],       n = 3
Output: [1,2,2,3,5,6]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


三、My answer

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.
        """
        l = m + n
        while m > 0 and n > 0:
            if nums1[m-1] > nums2[n-1]:
                nums1[l-1] =  nums1[m-1]
                m -= 1
            else:
                nums1[l-1] = nums2[n-1]
                n -= 1
            l -= 1
        if n > 0:
            for i in range(n):
                nums1[i] = nums2[i]
        print(nums1)
        return nums1
"""
[1,2,3,0,0,0]
3
[2,5,6]
3
[1,2,0,0,0]
2
[2,5,6]
3
[2,5,6,0,0,0]
3
[1,2,3]
3
[2,5,6,0,0,0]
3
[5,7]
2
"""


四、解题报告

代码中注释部分是测试用例,LeetCode中我比较喜欢的一点就是可以同时测试多个,目前 lintcode 还不支持。

本算法算是一种逆向思维 —— 从后往前填满数组,而不是从前往后排,因为这样会遍历和移动多次数据,而从后往前只需要遍历 nums1 nums2 各一次。

比较 nums1 nums2 的数,谁大就放在所需位置,并向前移动一位指针。

如果最后剩的是 nums1 没遍历完,即 nums2 已全部插入 nums1 中,则不需要做任何操作,因为本来就是在 nums1 中的,剩下没遍历到的也是 nums1 的数。

但如果是剩的是 nums2,则说明原来的 nums1 已不在原位,需要把剩余的 nums2 的数填补到 nums1 的开头(因为从后往前遍历,剩下的位置是靠前的位置.)

相关文章
|
1天前
|
算法 测试技术 程序员
力扣经典150题第二十七题:两数之和 II - 输入有序数组
力扣经典150题第二十七题:两数之和 II - 输入有序数组
6 1
|
24天前
|
存储 算法 Java
【经典算法】LeetCode 26. 删除有序数组中的重复项:(Java/C/Python3实现含注释说明,Easy)
【经典算法】LeetCode 26. 删除有序数组中的重复项:(Java/C/Python3实现含注释说明,Easy)
12 2
|
10天前
|
存储 算法
leetcode题解:88.合并有序数组
leetcode题解:88.合并有序数组
11 0
|
10天前
|
索引
leetcode题解:26.删除有序数组重复项
leetcode题解:26.删除有序数组重复项
7 0
|
20天前
|
存储 算法 数据挖掘
LeetCode 题目 88:双指针\直接\递归\插入排序\归并排序 实现合并两个有序数组
LeetCode 题目 88:双指针\直接\递归\插入排序\归并排序 实现合并两个有序数组
|
1月前
|
存储 搜索推荐
题目----力扣--合并两个有序数组
题目----力扣--合并两个有序数组
18 0
|
1月前
|
存储 搜索推荐 C语言
Leetcode—合并两个有序数组—C语言
Leetcode—合并两个有序数组—C语言
|
1月前
|
Python
使用array()函数创建数组
使用array()函数创建数组。
29 3
|
1月前
|
存储 安全 Swift
在Swift中,数组(Array)
在Swift中,数组(Array)
38 3
|
1月前
|
JavaScript 前端开发
总结TypeScript 的一些知识点:TypeScript Array(数组)(下)
一个数组的元素可以是另外一个数组,这样就构成了多维数组(Multi-dimensional Array)。