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

相关推荐
Yupureki2 分钟前
《Linux系统编程》18.线程概念与控制
java·linux·服务器·c语言·jvm·c++
wuhen_n2 分钟前
排列算法完全指南 - 从全排列到N皇后,一套模板搞定所有排列问题
前端·javascript·算法
ai生成式引擎优化技术7 分钟前
拓世网络技术开发工作室的ts概率递推ai工程应用技术GEOChatGPT,不同用户账号信息,网站引用效果
算法
CylMK8 分钟前
题解:UVA1218 完美的服务 Perfect Service
数据结构·c++·算法·深度优先·图论
重生之我是Java开发战士10 分钟前
【广度优先搜索】BFS解决拓扑排序:课程表I,课程表II,火星词典
算法·leetcode·广度优先
丶小鱼丶17 分钟前
数据结构和算法之【阻塞队列】上篇
java·数据结构
人道领域19 分钟前
LeetCode【刷题日记】:滑动窗口算法详解:从暴力法到最优解
java·算法·leetcode
凤年徐21 分钟前
封装红黑树实现 mymap 和 myset
网络·c++·算法
zs宝来了26 分钟前
Redis 数据结构底层实现:intset、ziplist、skiplist 深度剖析
数据结构·redis·源码解析·skiplist·ziplist·intset
秃头狂魔30 分钟前
【HOT100】DAY1
算法·哈希算法