顺序表的删除-巧用基础算法查找(1)

已知长度为n的线性表A采用顺序储存结构,请写一时间复杂度为O(n),空间复杂度为O(1)的算法,该算法删除线性表中所有值为item的数据元素。(题目未要求元素间相对顺序不变)

分析:若使用普通删除算法则其时间复杂度为O(n^2)。设置两个指针i,j分别指向小下标端和大下标段,其相向移动。i要寻找等于item的元素,j要寻找不等于item的元素。然后将j所指向的元素覆盖i所指向的元素。i与j继续相向移动,当i>j时跳出循环。
在这里插入图片描述
代码实现:
Int i=0,j=curLength-1;
while(i<=j)
{
while (i<=j && aList[i]==item) i++;
while (i<=j && aList[j]!=item) j—;
if(i<j) aList[i++] = aList[j—];
}
curLength=i;

猜你喜欢

转载自blog.csdn.net/kleinzhen/article/details/108432901