C++实现LeetCode(88.混合插入有序数组)

 更新时间:2021年07月13日 14:24:46   作者:Grandyang  
这篇文章主要介绍了C++实现LeetCode(88.混合插入有序数组),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

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

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 - 1, j = n - 1, k = m + n - 1;
        while (i >= 0 && j >= 0) {
            if (nums1[i] > nums2[j]) nums1[k--] = nums1[i--];
            else nums1[k--] = nums2[j--];
        }
        while (j >= 0) 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 - 1, j = n - 1, k = m + n - 1;
        while (j >= 0) {
            nums1[k--] = (i >= 0 && nums1[i] > nums2[j]) ? nums1[i--] : nums2[j--];
        }
    }
};

到此这篇关于C++实现LeetCode(88.混合插入有序数组)的文章就介绍到这了,更多相关C++实现混合插入有序数组内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • c++获取进程信息列表和进程所调用的dll列表

    c++获取进程信息列表和进程所调用的dll列表

    这篇文章主要介绍了c++获取进程信息列表和进程所调用的dll列表,大家参考使用吧
    2013-11-11
  • 一个快速排序算法代码分享

    一个快速排序算法代码分享

    一个快速排序算法代码一个快速排序算法代码,代码内有注释,大家参考使用吧
    2014-01-01
  • 关于vector的常见用法详解

    关于vector的常见用法详解

    这篇文章主要介绍了关于vector的常见用法详解,vector本身可以作为数组使用,而且在一些元素个数不确定的场合可以很好地节省空间,本文给大家介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • 关于大小端、位域的一些概念详解

    关于大小端、位域的一些概念详解

    我们常用的x86结构都是小端模式,而大部分DSP,ARM也是小端模式,不过有些ARM是可以选择大小端模式。所以对于上面的maxHeight是应该以小端模式来存放,具体情况请看下面两表
    2013-10-10
  • VisualStudio2022打包项目文件为.exe安装包

    VisualStudio2022打包项目文件为.exe安装包

    本文主要介绍了VisualStudio2022打包项目文件为.exe安装包,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • C++实现LeetCode(44.外卡匹配)

    C++实现LeetCode(44.外卡匹配)

    这篇文章主要介绍了C++实现LeetCode(44.外卡匹配),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C++中Covariant返回值类型详解

    C++中Covariant返回值类型详解

    这篇文章主要介绍了C++中Covariant返回值类型详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以可以参考一下
    2022-09-09
  • c语言实现两个单链表的交叉合并方式

    c语言实现两个单链表的交叉合并方式

    今天小编就为大家分享一篇c语言实现两个单链表的交叉合并方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • DSP中浮点转定点运算--浮点与定点概述

    DSP中浮点转定点运算--浮点与定点概述

    本文主要介绍DSP中浮点与定点概述,很值得学习一下,需要的朋友可以参考一下。
    2016-06-06
  • C++文件IO流及stringstream流读写文件和字符串操作详解

    C++文件IO流及stringstream流读写文件和字符串操作详解

    本文详细介绍C++中的文件IO流和stringstream流的使用方法,包括文件的打开、读写操作,以及字符串的输入输出、转换等操作。同时提供实用的示例代码和技巧,帮助读者更好地掌握这两种流的使用
    2023-04-04

最新评论