从排序数组中删除重复项 (1)--- 线性表

这篇博客讨论了一个算法问题,即如何在已排序的数组中删除重复元素,同时保持原地修改且不使用额外空间。提供的C语言代码实现了一个解决方案,该方案通过遍历数组并比较相邻元素来达到目的,返回新数组的长度。这个算法的时间复杂度为O(n),空间复杂度为O(1)。

【描述】

给定一个排序的数组,在适当的位置删除重复项,使每个元素只出现一次,并返回新长度。

不要为另一个数组分配额外的空间,您必须使用固定内存就地执行此操作。

例如:

给定输入数组A=[1,1,2],

函数应该返回length = 2,现在A是[1, 2]

【分析】

1. 异常情况处理,如数组长度不大于0;

2. 使用一个变量记录目前数组不重复项个数;

3. 算法分析:时间复杂度为 O(n),空间复杂度O(1);

【代码实现】

注意:需要测试用例,评论留言;

//demo.h
int removeDuplicates(int arr[], int len);
//demo.c
int removeDuplicates(int arr[], int len)
{
	int index = 0;

	if (len <= 0) {
		return 0;
	}

	for (int ix = 1; ix < len; ix++){
		if (arr[ix] != arr[index]) {
			arr[++index] = arr[ix];	
		}
	}

	return index + 1;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值