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

数据结构 ——— 顺序表oj题:编写函数,合并两个有序数组

目录

题目要求

代码实现


题目要求

nums1 和 nums2 是两个升序的整型数组,另外有两个整数 m 和 n 分别代表 nums1 和 nums2 中的元素个数

要求合并 nusm2 到nums1 中,使合并后的 nums1 同样按升序顺序排列

最终,合并后的数组不应由函数返回,而是存储在数组 nums1 中,为了应对这种情况,nums1 的初始长度为 m+n


代码实现

代码演示:

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

代码解析:

end1 是 nums1 数组的最后一个有效元素的下标

end2 是 nums2 数组的最后一个有效元素的下标

i 是 nums1 数组的最后一个元素的下标

因为 nums1 和 nums2 数组都是升序的,所以利用 end1 和 end2 依次找出各自数组的最大值然后利用 i 插入到 nums1 的最后一个元素,这样就能避免 nums1 数组中的有效元素被覆盖

end1 和 end2 找到各自数组中的最大值后再往前找次大的值,直到 end1 或者 end2 小于 0 了就停止

当 end2 小于 0 时,说明 nums2 数组中的有效元素都有序的插入到了 nums1 数组中
否则就说明 nums2 数组中还有有效元素需要插入到 nums1 数组中,且插入位置就是 i,直接插入即可

代码演示:

算法的时间复杂度:

假设第一个 while 循环执行了 X 次,那么第二个 while 循环就执行了 N-X 次

两个循环加在一起得:X + N-X = N ,由此得出算法的时间复杂度:

算法的时间复杂度(大O渐进表示法):O(N)

算法的空间复杂度:

没有开辟或消耗额外的空间,所以得出算法的空间复杂度:

算法的空间复杂度(大O渐进表示法):O(1)

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

相关文章:

  • Proto文件相关知识
  • k8s的控制节点不能访问node节点容器的ip地址
  • 鸿蒙OpenHarmony
  • 把白底照片变蓝色用什么软件免费 批量更换证件照底色怎么弄
  • Spring之生成Bean
  • 笔记整理—linux进程部分(6)进程间通信、alarm和pause
  • Java网络通信—UDP
  • k8s架构,从clusterIP到光电半导体,再从clusterIP到企业管理
  • vue框架和uniapp框架区别
  • 828华为云征文 | 华为云Flexus云服务器X实例搭建Zabbix网络设备监视系统(Ubuntu服务器运维)
  • JAVA基础-线程(Thread)、多线程(Multi-threaded)
  • hystrix微服务部署
  • 使用百度文心智能体创建多风格表情包设计助手
  • 【嵌入式裸机开发】智能家居入门3(MQTT服务器、MQTT协议、微信小程序、STM32)
  • css的背景background属性
  • Cypress自动化测试实战:构建高效的前端测试体系
  • 【YOLO学习】YOLOv2详解
  • windows 录音编码为flv格式时,pcm采样格式
  • Qt开发技巧(九)去掉切换按钮,直接传样式文件,字体设置,QImage超强,巧用Qt的全局对象,信号槽断连,低量数据就用sqlite
  • 51c自动驾驶~合集1
  • Star 3w+,向更安全、更泛化、更云原生的 Nacos3.0 演进
  • PHP魔幻(术)方法
  • VS开发 - 静态编译和动态编译的基础实践与混用
  • Golang | Leetcode Golang题解之第451题根据字符出现频率排序
  • 零信任如何增强网络物理系统 (CPS) 安全性
  • V3D——从单一图像生成 3D 物体
  • 计算机网络期末复习真题(附真题答案)
  • Unity 的 UI Event System 是一个重要的框架
  • 第十三章 集合
  • 子非线程池中物