数据结构 ——— 顺序表oj题:编写函数,删除有序数组中的重复项

目录

题目要求

代码实现


题目要求

一个升序排列 的数组 nums ,要求原地 删除重复出现的元素,使每个元素只出现一次,并返回删除后数组的新长度,元素的相对顺序应该保持一致


代码实现

代码演示:

复制代码
int removeDuplicates(int* nums, int numsSize)
{
	int slow = 1;

	for (int fast = 1; fast < numsSize; fast++)
	{
		if (nums[fast] != nums[fast - 1])
		{
			nums[slow] = nums[fast];
			slow++;
		}
	}

	return slow;
}

代码解析:

使用快慢指针的概念完成代码逻辑,slow 和 fast 就相当于 nums 数组的下标,都从 1 开始执行,因为第一个元素不论是不是重复的都不需要改变

**slow 指针的作用是:**用来存储 nums 数组中只出现过一次的元素,且 for 循环执行完后,slow 的值就是新 nums 数组的长度

**fast 指针的作用是:**找 nums 数组中不同的元素,fast 是从 1 开始的,只要 nums[fast] 和 nums[fast-1] 不同时,那么 nums[fast] 就是那个不同的元素,直接赋值给 nums[slow] 即可

代码验证:

算法的时间复杂度:

for 循环执行了 N 次,且每次循环内部执行的是常数次,得出时间复杂度:

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

算法的空间复杂度:

没有开辟额外的空间,都是在 nums 原数组上操作的,得出空间复杂度:

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

相关推荐
颜酱10 小时前
图的数据结构:从「多叉树」到存储与遍历
javascript·后端·算法
zone773915 小时前
006:RAG 入门-面试官问你,RAG 为什么要切块?
后端·算法·面试
CoovallyAIHub18 小时前
OpenClaw 近 2000 个 Skills,为什么没有一个好用的视觉检测工具?
深度学习·算法·计算机视觉
CoovallyAIHub18 小时前
CVPR 2026 | 用一句话告诉 AI 分割什么——MedCLIPSeg 让医学图像分割不再需要海量标注
深度学习·算法·计算机视觉
CoovallyAIHub18 小时前
Claude Code 突然变成了 66 个专家?这个 5.8k Star 的开源项目,让我重新理解了什么叫"会用 AI"
深度学习·算法·计算机视觉
兆子龙18 小时前
前端哨兵模式(Sentinel Pattern):优雅实现无限滚动加载
前端·javascript·算法
CoovallyAIHub1 天前
9个视觉语言模型工厂实测:Qwen 87.9%碾压全场,你的显卡能跑哪个?
算法
SparkX开源AI知识库1 天前
手摸手带你安装OpenClaw并对接飞书
算法·架构
一语07161 天前
3分钟搞懂深度学习AI:实操篇:卷积层
人工智能·算法