当前位置: 首页 > news >正文

【数据结构OJ题】合并两个有序数组

原题链接:https://leetcode.cn/problems/merge-sorted-array/

目录

1. 题目描述

2. 思路分析

3. 代码实现


1. 题目描述

2. 思路分析

看到这道题,我们注意到nums1[ ]和nums2[ ]两个数组都是非递减的。所以我们很容易想到额外开一个数组tmp[ ],依次比较两个数组的元素,每次取小的尾插到新数组tmp[ ]即可。但是这需要额外再开空间。

 

 

 

也有一种方法是将这两个数组的元素都拷贝到一起,然后使用qsort排序  复杂度为O(NlogN)。

显然这两种方法的复杂度都不够优秀,是否有更好的方法呢?

我们可以倒着比较,取大的依次往前插入。等到有一个数组被遍历完,就结束。

因为两个数组都是非递减的,nums1[ ]数组的长度比nums2[ ]大,所以如果nums1[ ]先被遍历完,就将nums2[ ]没有被遍历的元素直接拷贝到nums1[ ]前面。

如果nums2[ ]先被遍历完,则不用额外操作(因为nums1[ ]整体本身就是非递减的,所以那些没有被遍历到的元素也是按非递减排列的)。

流程演示:

 ​​​​​​​

 

 

3. 代码实现

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {int end1 = m - 1, end2 = n - 1, end = m + n - 1;while (end1 >= 0 && end2 >= 0){if (nums1[end1] >= nums2[end2])nums1[end--] = nums1[end1--];elsenums1[end--] = nums2[end2--];}while (end2 >= 0)nums1[end--] = nums2[end2--];
}

http://www.lryc.cn/news/112457.html

相关文章:

  • 数据结构笔记--归并排序及其拓展题(小和问题、逆序对问题)
  • flutter开发实战-实现css线性渐变转换flutter渐变LinearGradient功能
  • python推理小游戏bagels
  • DBSCAN聚类
  • java+ssm美食推荐交流系统 7jsw7
  • 基于php雪花算法工具类Snowflake -来自chatGPT
  • 怎么加密文件夹才更安全?安全文件夹加密软件推荐
  • 知识分享和Tomcat简单部署press应用
  • 回归预测 | MATLAB实现SO-CNN-BiGRU蛇群算法优化卷积双向门控循环单元多输入单输出回归预测
  • 步入React前厅 - 组件和JSX
  • SpringBoot整合Sfl4j+logback的实践
  • IT 基础架构自动化
  • Docker入门——保姆级
  • MONGODB ---- Austindatabases 历年文章合集
  • 菠萝头 pinia和vuex对比 pinia比vuex更香 Pinia数据持久化及数据加密
  • 机器学习笔记 - 关于GPT-4的一些问题清单
  • sql 参数自动替换
  • Linux——设备树
  • 网络:从socket编程的角度说明UDP和TCP的关系,http和tcp的区别
  • 大数据技术之Hadoop:HDFS集群安装篇(三)
  • 移动开发最佳实践:为 Android 和 iOS 构建成功应用的策略
  • 2023年第二届网络安全国际会议(CSW 2023)
  • 【100天精通python】Day23:正则表达式,基本语法与re模块详解示例
  • C++ 派生类成员的标识与访问——作用域分辨符
  • SQL注入实操三(SQLilabs Less41-65)
  • (亲测解决)PyCharm 从目录下导包提示 unresolved reference(完整图解)
  • 【AI量化模型】跑通baseline
  • ElasticSearch:全文检索及倒排索引原理
  • blk_mq_alloc_tag_set函数struct blk_mq_tag_set结构体学习
  • Windows搭建Snort环境及使用方式