Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.

Note:

  • The number of elements initialized in nums1and 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]

混合插入有序数组,由于两个数组都是有序的,所有只要按顺序比较大小即可。题目中说了 nums1 数组有足够大的空间,说明不用 resize 数组,又给了m和n,那就知道了混合之后的数组的大小,这样就从 nums1 和 nums2 数组的末尾开始一个一个比较,把较大的数,按顺序从后往前加入混合之后的数组末尾。需要三个变量 i,j,k,分别指向 nums1,nums2,和混合数组的末尾。进行 while 循环,如果i和j都大于0,再看如果 nums1[i] > nums2[j],说明要先把 nums1[i] 加入混合数组的末尾,加入后k和i都要自减1;反之就把 nums2[j] 加入混合数组的末尾,加入后k和j都要自减1。循环结束后,有可能i或者j还大于等于0,若j大于0,那么还需要继续循环,将 nums2 中的数字继续拷入 nums1。若是i大于等于0,那么就不用管,因为混合数组本身就放在 nums1 中,参见代码如下:

解法一:

class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int i = m - , j = n - , k = m + n - ;
while (i >= && j >= ) {
if (nums1[i] > nums2[j]) nums1[k--] = nums1[i--];
else nums1[k--] = nums2[j--];
}
while (j >= ) nums1[k--] = nums2[j--];
}
};

我们还可以写的更简洁一些,将两个 while 循环融合到一起,只要加上 i>=0 且 nums1[i] > nums2[j] 的判断条件,就可以从 nums1 中取数,否则就一直从 nums2 中取数,参见代码如下:

解法二:

class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int i = m - , j = n - , k = m + n - ;
while (j >= ) {
nums1[k--] = (i >= && nums1[i] > nums2[j]) ? nums1[i--] : nums2[j--];
}
}
};

Github 同步地址:

https://github.com/grandyang/leetcode/issues/88

类似题目:

Merge Sorted Array

Merge Two Sorted Lists

Squares of a Sorted Array

Interval List Intersections

参考资料:

https://leetcode.com/problems/merge-sorted-array/

https://leetcode.com/problems/merge-sorted-array/discuss/29572/My-simple-solution

https://leetcode.com/problems/merge-sorted-array/discuss/29515/4ms-C%2B%2B-solution-with-single-loop

LeetCode All in One 题目讲解汇总(持续更新中...)

[LeetCode] 88. Merge Sorted Array 混合插入有序数组的更多相关文章

  1. [LeetCode] Merge Sorted Array 混合插入有序数组

    Given two sorted integer arrays A and B, merge B into A as one sorted array. Note:You may assume tha ...

  2. LeetCode 88. Merge Sorted Array(合并有序数组)

    Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note:Yo ...

  3. leetCode 88.Merge Sorted Array (合并排序数组) 解题思路和方法

    Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note: Y ...

  4. Leetcode#88. Merge Sorted Array(合并两个有序数组)

    题目描述 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 m ...

  5. [LeetCode] 88. Merge Sorted Array 合并有序数组

    Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note: T ...

  6. [leetcode]88. Merge Sorted Array归并有序数组

    Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note: T ...

  7. LeetCode 88 Merge Sorted Array

    Problem: Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array ...

  8. Leetcode 88. Merge Sorted Array(easy)

    Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note:Yo ...

  9. Leetcode 88 Merge Sorted Array STL

    合并有序数组 时间复杂度O(m+n) 该算法来自各种算法与数据结构书,写得已经烂得不能再烂了,这个应该是最短的代码了吧,不知如何归类 class Solution { public: void mer ...

随机推荐

  1. WIN7快速打开hosts方法

    WIN7快速打开hosts方法 1直接运行C:\Windows\System32\drivers\etc\hosts 浏览选择notepad++打开即可 2打开notepad++打开 C:\Windo ...

  2. 2019-7-29-win10-UWP-使用-MD5算法

    原文:2019-7-29-win10-UWP-使用-MD5算法 title author date CreateTime categories win10 UWP 使用 MD5算法 lindexi 2 ...

  3. 基于OpenCV.Net投影法进行文本分块切割

    假设有如下一张图,如何把其中的文本分块切割出来,比如“华普超市朝阳门店”.“2015-07-26”就是两个文本块. 做图像切割有很多种方法,本文描述一种最直观的投影检测法.先来看看什么是投影,简单来说 ...

  4. 写入文件writelines 换行问题

    知识点:在python中没有数组的概念,有列表.元组.字典的概念 问题描述: 在写循环语句的时候,我需要把输出的列表存放到文件上,但是如果没有换行的话,存下的文件就是一坨的字. 所以在存入文件的时候就 ...

  5. Java编程基础——数组和二维数组

    Java编程基础——数组和二维数组 摘要:本文主要对数组和二维数组进行简要介绍. 数组 定义 数组可以理解成保存一组数的容器,而变量可以理解为保存一个数的容器. 数组是一种引用类型,用于保存一组相同类 ...

  6. Java生鲜电商平台-商品无限极目录的设计与架构

    Java生鲜电商平台-商品无限极目录的设计与架构 说明:任何一个商品都应该是先属于某一个目录,然后在目录中添加商品,目录理论上最多支持三级,因为级别太多,不容易管理.但是设计中需要设计无限制的级别. ...

  7. Java自学-集合框架 List接口

    ArrayList与List接口 步骤 1 : ArrayList和List ArrayList实现了接口List 常见的写法会把引用声明为接口List类型 注意:是java.util.List,而不 ...

  8. 深入理解Vue组件3大核心概念

    摘要: 搞懂Vue组件! 作者:浪里行舟 原文:详解vue组件三大核心概念 Fundebug经授权转载,版权归原作者所有. 前言 本文主要介绍属性.事件和插槽这三个vue基础概念.使用方法及其容易被忽 ...

  9. docker研究-4 docker镜像制作

    这次实验以centos镜像为基础镜像进行相关docker镜像制作. 1. 下载centos镜像 [root@localhost ~]# docker pull centosUsing default ...

  10. SQLserver 《深入分析sqlserver 2008》

    PDF版本: 链接:https://pan.baidu.com/s/1bheII-EdyleVJaR5r9lT9Q 提取码:f8zz