【描述】
给定一个排序的数组,在适当的位置删除重复项,使每个元素只出现一次,并返回新长度。
不要为另一个数组分配额外的空间,您必须使用固定内存就地执行此操作。
例如:
给定输入数组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;
}
这篇博客讨论了一个算法问题,即如何在已排序的数组中删除重复元素,同时保持原地修改且不使用额外空间。提供的C语言代码实现了一个解决方案,该方案通过遍历数组并比较相邻元素来达到目的,返回新数组的长度。这个算法的时间复杂度为O(n),空间复杂度为O(1)。
2678

被折叠的 条评论
为什么被折叠?



