栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构入门(88. 合并两个有序数组)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构入门(88. 合并两个有序数组)

文章目录
  • 一、逆序双指针
  • 二、视频介绍
  • 三、代码


一、逆序双指针
  • 因为要将nums2的元素插入nums1,如果按顺序插入就有可能覆盖掉nums1的元素,因此采用逆序的方式插入。
  • 创建两个指针p1和p2,分别指向nums1和nums2需要合并数组的末尾。
  • 创建一个指针a指向nums1的末尾,比较nums1[p1]和nums2[p2]的大小,把较大的数存入nums1[a],然后a–,nums1[p1]和nums2[p2]中较大元素的指针减一。
二、视频介绍

88. 合并两个有序数组

三、代码
class Solution {
public:
    void merge(vector& nums1, int m, vector& nums2, int n) {
        int a = nums1.size() - 1;
        int p1 = m - 1; //指向nums1需要合并数组的末尾
        int p2 = n - 1; //指向nums2需要合并数组的末尾
        while (a >= 0)
        {
            if (p1 == -1)
            {
                nums1[a--] = nums2[p2--]; //如果nums1需要合并的数组已经完成合并,就把nums2剩余需要合并的数组都赋给nums1
            }
            else if (p2 == -1)
            {
                nums1[a--] = nums1[p1--];//如果nums2需要合并的数组已经完成合并,就把nums1剩余需要合并的数组都赋给nums1
            }
            else
            {
                nums1[a--] = nums1[p1] >= nums2[p2] ? nums1[p1--] : nums2[p2--];  //将nums1[p1]和nums2[p2]中较大的赋给nums1[a],较大的元素的指针指向前一个元素,同时a也指向前一个元素
            }
        }
    }
};
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/958129.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号