删除有序数组中重复元素

代码如下,

img

设置了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;
}