妙用快慢指针删除排序数组中的重复项
/*
* 妙用快慢指针,利用两个指针i, j,初始化值为0和1,当两个指针对应的值相等时,指针j+1,继续执行循环;而当两个指针对应的值不相等时,
* 将指针i+1,并将指针j对用的值赋值给指针i,然后指针j+1,继续向下执行循环,直到循环结束。
*/
int deleteDuplicates(int a[],int len)
{
if(len <= 1)
{
return len;
}
int * pFast = a + 1;
int * pSlow = a;
while(pFast != &a[len - 1])
{
if(*pSlow != *pFast) //不等,先移动慢指针,赋值,再移动快指针
{
pSlow++;
*pSlow = *pFast;
pFast++;
}
else //移动快指针
{
pFast++;
}
}
//再判断原数组最后一个元素
if(*pSlow != *pFast)
{
pSlow++;
*pSlow = *pFast;
}
//细节需要注意:最后慢指针是最后一个数据的索引,要求是返回数组的长度,所以需要 +1返回;
// qDebug() << "\n" << pSlow - a + 1<< endl;
// for(int i = 0; i < pSlow - a + 1;i++)
// {
// qDebug() << a[i] << endl;
// }
return pSlow - a + 1;
}