【每日算法 && 数据结构(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

在这里插入图片描述

  • 时间 && 空间复杂度
    • 时间复杂度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;
}

在这里插入图片描述

在这里插入图片描述

各位大佬点点关注,点赞,收藏,有空的时候再回来看看,谢谢
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ltd Pikashu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值