【每日算法 && 数据结构(C++)】—— 03 | 合并两个有序数组(解题思路、流程图、代码片段)

这篇具有很好参考价值的文章主要介绍了【每日算法 && 数据结构(C++)】—— 03 | 合并两个有序数组(解题思路、流程图、代码片段)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


【每日算法 && 数据结构(C++)】—— 03 | 合并两个有序数组(解题思路、流程图、代码片段)

An inch of time is an inch of gold, but you can’t buy that inch of time with an inch of gold.

An inch of time is an inch of gold, but you can't buy that inch of time with an inch of gold

01 | 👑 题目描述

给你两个有序数组,请将两个数组进行合并,并且合并后的数组也必须有序

这个题目要求将两个有序数组合并成一个有序数组。在数学上,我们可以使用归并排序的思想来解决这个问题。

02 | 🔋 解题思路

假设给定的两个有序数组分别为 arr1arr2,长度分别为 n1n2。我们可以创建一个新的数组 result,长度为 n1 + n2,用于存储合并后的有序数组。

我们可以使用两个指针 ij 分别指向 arr1arr2 的起始位置。然后,我们比较这两个指针所指向的元素,并将较小的元素加入到 result 数组中。然后根据比较结果,移动相应的指针。

具体的步骤如下

  1. 创建一个新的数组 result,长度为 n1 + n2
  2. 初始化指针 ij 分别为 0,指向 arr1arr2 的起始位置。
  3. 使用循环,比较 arr1[i]arr2[j] 的大小:
    • 如果 arr1[i] < arr2[j],将 arr1[i] 加入到 result 数组中,然后将指针 i 向后移动一位。
    • 如果 arr1[i] > arr2[j],将 arr2[j] 加入到 result 数组中,然后将指针 j 向后移动一位。
    • 如果 arr1[i] = arr2[j],将 arr1[i]arr2[j] 分别加入到 result 数组中,然后将指针 ij 都向后移动一位。
    • 重复上述步骤,直到其中一个数组的元素全部加入到 result 数组中。
  4. 将剩余未加入 result 数组的元素依次加入。
  5. 返回合并后的有序数组 result

【每日算法 && 数据结构(C++)】—— 03 | 合并两个有序数组(解题思路、流程图、代码片段)

  • 时间 && 空间复杂度
    • 时间复杂度O(n1 + n2)
      其中 n1 和 n2 分别是两个有序数组的长度。这是因为我们需要将两个数组中的所有元素逐个比较和复制到新的数组中

    • 空间复杂度O(n1 + n2)
      因为我们需要创建一个大小为 n1 + n2 的新数组来存储合并后的有序数组

03 | 🧢 代码片段

#include <iostream>
#include <vector>

std::vector<int> mergeSortedArrays(const std::vector<int>& arr1, const std::vector<int>& arr2) {
    std::vector<int> mergedArray;
    int i = 0; // 指向arr1的指针
    int j = 0; // 指向arr2的指针

    // 比较arr1和arr2中的元素,将较小的元素加入到mergedArray中
    while (i < arr1.size() && j < arr2.size()) {
        if (arr1[i] < arr2[j]) {
            mergedArray.push_back(arr1[i]);
            i++;
        } else {
            mergedArray.push_back(arr2[j]);
            j++;
        }
    }

    // 将剩余未加入mergedArray的元素依次加入
    while (i < arr1.size()) {
        mergedArray.push_back(arr1[i]);
        i++;
    }

    while (j < arr2.size()) {
        mergedArray.push_back(arr2[j]);
        j++;
    }

    return mergedArray;
}

int main() {
    std::vector<int> arr1 = {1, 3, 5, 7, 9};
    std::vector<int> arr2 = {2, 4, 6, 8, 10};

    std::vector<int> mergedArray = mergeSortedArrays(arr1, arr2);

    std::cout << "Merged Array: ";
    for (int num : mergedArray) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

【每日算法 && 数据结构(C++)】—— 03 | 合并两个有序数组(解题思路、流程图、代码片段)

【每日算法 && 数据结构(C++)】—— 03 | 合并两个有序数组(解题思路、流程图、代码片段)文章来源地址https://www.toymoban.com/news/detail-507991.html

各位大佬点点关注,点赞,收藏,有空的时候再回来看看,谢谢

到了这里,关于【每日算法 && 数据结构(C++)】—— 03 | 合并两个有序数组(解题思路、流程图、代码片段)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构:两个顺序表合并算法

            将a,b两个有序顺序表进行合并,放在c顺序表当中,并且要保证顺序表c仍然有序。         因为a,b两个顺序表是有序的,所有可以从前往后一起查找a,b当中最小的一个数值,放入到c中。         如果遍历到最后,a遍历完了,b没有遍历完,就把b剩下的放入

    2024年02月08日
    浏览(27)
  • 数据结构2.2,将两个非递减的有序链表合并为一个非递增的有序链表,要求结果链表仍使用原来两个链表的存储空间,不占用其他的存储空间。表中允许有重复的数据。

    大概思路:1.先写出建立链表的函数(creatlist):分配头节点,尾指针置空。 2.写出插入节点的代码函数:申请一片空间存放要插入的节点,把新插入的节点置空,令指向链表的头节点的下一个指针指向该节点,在把该指针指向新插入的节点。用if函数写出当输入的指小于零时

    2024年02月05日
    浏览(28)
  • Leetcode每日一题——“合并两个有序数组”

    各位CSDN的uu们你们好呀,又到小雅兰的愉快题解时候啦,今天,我们的题目内容是合并两个有序数组,下面,让我们进入合并两个有序数组的世界吧 示例 1: 输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3 输出:[1,2,2,3,5,6] 解释:需要合并 [1,2,3] 和 [2,5,6] 。 合并结果是 [ 1,2

    2023年04月24日
    浏览(55)
  • 力扣每日一题88:合并两个有序数组

    给你两个按  非递减顺序  排列的整数数组  nums1   和  nums2 ,另有两个整数  m  和  n  ,分别表示  nums1  和  nums2  中的元素数目。 请你  合并   nums2   到  nums1  中,使合并后的数组同样按  非递减顺序  排列。 注意: 最终,合并后数组不应由函数返回,而是存储在

    2024年02月07日
    浏览(32)
  • C语言每日一题(22)合并两个有序数组

    力扣网 88. 合并两个有序数组 给你两个按  非递减顺序  排列的整数数组  nums1   和  nums2 ,另有两个整数  m  和  n  ,分别表示  nums1  和  nums2  中的元素数目。 请你  合并   nums2   到  nums1  中,使合并后的数组同样按  非递减顺序  排列。 注意: 最终,合并后数组

    2024年02月08日
    浏览(30)
  • 【力扣每日一题】2023.8.13 合并两个有序数组

    目录 题目: 示例: 分析: 代码: 题目给我们两个升序数组,让我们合并它们,要求合并之后仍然是升序,并且这个合并操作是在数组1原地修改的。数组1的有效数据长度为 m ,而数组1的长度为 m + n,n 是数组2的有效数据长度以及数组的长度。 比较直观容易想到的做法就是

    2024年02月12日
    浏览(31)
  • 2023-08-13 LeetCode每日一题(合并两个有序数组)

    点击跳转到题目位置 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 **注意:**最终,合并后数组不应由函数返回,而是存储在数组 num

    2024年02月13日
    浏览(42)
  • “三指针法“合并两个有序数组(力扣每日一练)

            我的第一想法确实是:先合并数组,再排序,搞完。         哈哈哈,想那么多干嘛,目的达成了就好了。 力扣官方题解是双指针: 还有糕手: Python: C#:       总结         可以称之为\\\"三指针\\\" 方法,因为我们同时使用了三个指针(p1、p2 和 p)来操作和遍历两

    2024年02月02日
    浏览(28)
  • 力扣每日一道系列 --- LeetCode 88. 合并两个有序数组

    📷 江池俊: 个人主页 🔥个人专栏: ✅数据结构探索 ✅LeetCode每日一道 🌅 有航道的人,再渺小也不会迷途。 LeetCode 88. 合并两个有序数组 首先创建一个临时数组,其大小为第一个数组的大小(即nums1Size),其作用主要是。 通过循环遍历两个数组,将两个数组元素比较后较

    2024年02月04日
    浏览(34)
  • C语言每日一题:6.移除元素+合并两个有序数组。

    一:暴力查找的方法: 1.找到对应val值的下标,返回数组的下标。 2.删除对应的下标,从前向后用后面覆盖前面。当后一个是数组最后一个数值是就赋值结束了(注意数组越界的问题)。 3.删除了一个数之后数组元素个数要–。 4.查找和删除是在一个循环里面因为val的值可能

    2024年02月15日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包