代码如下,
设置了f和s两个指针,我的想法是设置一个循环让快指针f遍历整个数组nums,如果nums[f]与nums[s]相等,则f++,再与nums[s]对比,如果nums[f]与num[s]不相等,此时s++并且将nums[f]的值复制给nums[s],这样一直到f把nums遍历完。但是为什么代码编译执行后,结果却不对呢?是逻辑上哪里出了问题吗?
代码如下,
设置了f和s两个指针,我的想法是设置一个循环让快指针f遍历整个数组nums,如果nums[f]与nums[s]相等,则f++,再与nums[s]对比,如果nums[f]与num[s]不相等,此时s++并且将nums[f]的值复制给nums[s],这样一直到f把nums遍历完。但是为什么代码编译执行后,结果却不对呢?是逻辑上哪里出了问题吗?
你这里并没有删除元素啊,原来nums有多少个元素,现在仍旧多少。你是想返回重复的该删除的元素的下标吗,那就这样:
void removeduplicate(vector<int> &inputvec,vector<int> &removeid)
{
if(inputvec.size()<2)
return;
for(int slowid=0;slowid!=inputvec.size();slowid++)
{
int fastid=slowid+1;
while(fastid!=inputvec.size())
{
if(inputvec[fastid]==inputvec[slowid])
{
removeid.push_back(fastid);
break;
}
fastid++;
}
}
}
int main()
{
vector<int> vec={2,5,2,6,8,12,2,6};
vector<int> removeid;
removeduplicate(vec,removeid);
for(int id=0;id!=removeid.size();id++)
{
cout<<removeid[id]<<" ";
}
cout<<endl;
return 0;
}