数据结构 ——— 顺序表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)

相关推荐
一个行走的民5 分钟前
深度剖析 Ceph PG 分裂机制:原理、底层、实操、影响、线上避坑(最全完整版)
ceph·算法
WolfGang0073218 分钟前
代码随想录算法训练营 Day46 | 图论 part04
算法·图论
拾-光15 分钟前
LTX-Video 2.3 实战:用图片生成视频,消费级显卡也能跑的开源 I2V 模型(GPT Image 2)
java·人工智能·python·深度学习·算法·机器学习·音视频
小O的算法实验室19 分钟前
2026年ESWA,考虑曲率约束路径优化的 Dubins-RRT* 运动规划算法,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
jllllyuz20 分钟前
灰狼算法优化的LSSVR程序
算法
杨校27 分钟前
杨校老师课堂之栈结构的专项训练
算法
故事和你9138 分钟前
洛谷-算法2-2-常见优化技巧3
开发语言·数据结构·c++·算法·深度优先·动态规划·图论
菜鸟5555543 分钟前
2025江西省CCPC省赛暨全国邀请赛(南昌)
数据结构·c++·算法·acm·思维·ccpc·xcpc
小柯博客1 小时前
Amazon Kinesis Video Streams C WebRTC SDK 开发实战
c语言·开发语言·网络·stm32·嵌入式硬件·webrtc·yocto
lds走自己的路1 小时前
全局坐标转局部坐标推导
人工智能·算法·机器学习