VICTORIA.YF 2021-12-21 14:24 采纳率: 72.7%
浏览 41
已结题

删除升序数组中的重复元素,begin到end之间的代码是什么意思呢?求详细解释

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

//删除升序数组中的重复元素(指针版)
//编写程序,删除一维数组中所有相同的数,只保留一个,
//数组中的数已按由小到大的顺序排列,
//int unique(int *pArr,int num)
//pArr和num分别为数组首地址和数组元素的个数,
//函数返回删除重复元素之后数组中元素个数。
#include <fstream>
#include <iostream>
using namespace std;
int unique(int *pArr,int num)
{
/********************************** Begin ****************************/
    int *p,count;
    p=pArr;
    for(int i=0;i<num-1;i++)
    {
        if(pArr[i+1]!=pArr[i])
        {
            p++;
            *p=pArr[i+1];
        }
    }
    count=p-pArr+1;
    return count;






/********************************** End ******************************/
}
int main()
{
    ofstream file_out("out.txt"); 
    if(!file_out) return -1;
    streambuf *std_out;
    std_out= cout.rdbuf(file_out.rdbuf());  
    int a[]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10};
    int num1 = sizeof(a)/sizeof(int);
    int num2 = unique(a,num1);
    cout<<a[0];
    for (int i=1;i<num2;i++)
    {
        cout<<" "<<a[i];
    }
    cout<<'\n';
    file_out.close();
    cout.rdbuf(std_out);    
    return 0;
}

展开全部

  • 写回答

1条回答 默认 最新

  • 真相重于对错 2021-12-22 08:01
    关注

    它使用的快慢指针法,快指针是由i确定,慢指针是p,当执行到16行的时候,发现下一个元素和快指针的元素不同是,p移向p的下个元素,并把那个不同的复制过来
    如果快指针指向的元素和快指针指向的下一个元素相同,只移动快指针而不移动慢指针p

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    VICTORIA.YF 2021-12-22 13:54

    谢谢,这部分懂了,我想再问一下那个count是什么意思呢,这样计算为什么可以得到结果呢

    回复
    真相重于对错 回复 VICTORIA.YF 2021-12-22 14:50

    p就是不包含重复数据的数组的最后一个值,count 就是不重复的数据共有多少项

    回复
    VICTORIA.YF 回复 真相重于对错 2021-12-22 14:59

    那为啥count=p-pArr+1呢

    回复
    展开全部5条评论
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 12月30日
  • 已采纳回答 12月23日
  • 创建了问题 12月21日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部