顺序表 删除重复 编写算法,在一非递减的顺序表L中,删除所有值相等的多余元素。要求时间复杂度为O(n),空间复杂度为O(1)。、
时间: 2024-05-08 19:17:02 浏览: 112
设计算法实现删除顺序表中多余重复元素.txt
算法思路:
由于顺序表是非递减的,因此相同的元素一定是相邻的,可以使用双指针法来进行删除操作。定义两个指针i和j,初始时i=0,j=1,表示当前要比较的两个元素。如果L[i]和L[j]不相等,则将L[j]赋值给L[i+1],i和j都加1;如果L[i]和L[j]相等,则j加1,继续比较下一个元素。重复上述操作,直到j大于等于表长n。
算法实现:
```
void delDuplicate(SqList &L) {
int i = 0, j = 1;
while (j < L.length) {
if (L[i] != L[j]) {
L[++i] = L[j];
}
j++;
}
L.length = i + 1;
}
```
算法分析:
由于每个元素最多被访问两次,因此时间复杂度为O(n),由于只使用了常数个辅助变量,因此空间复杂度为O(1)。
阅读全文