c++去重函数unique

1.头文件<algorithm>

unique去重区间左闭右开(和sort)一样

返回最后一个不重复元素的下标

时间复杂度为O(n),加上sort就为O(nlogn)

具体用法

  int a[10]={0,1,3,3,4,5,8,8,9,0};
    int n=unique(a,a+10)-a;
    for(int i=0;i<n;i++){
    	cout<<a[i]<<" ";
    }

n是:最后一个不重复数字的下标。

不过一般在进行去重时先排序

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
	int i;
	int a[10]={0,1,3,3,4,5,8,8,9,0};
	sort(a,a+10);//按从小到大的顺序
	int n=unique(a,a+10)-a;
	for(int i=0;i<n;i++){
		cout<<a[i]<<" ";
	}
 } 

也可手写去重

#include <iostream>
#include <algorithm>
 
using namespace std;
 
int main()
{
    int i = 0, j = 0;
    const int len = 10; // 数组的长度
    int p[len] = { 0, 7, 7, 6, 1, 1, 5, 5, 8, 9 };
    int t[len] = {0};   // 储存去重后的数组
    int counter = 1;    // 记录t数组中存了多少元素
 
    sort(p, p + len);   // 排序
 
    t[0] = p[0];
    // 去重
    while (i < len) {
        if (p[i] != p[++j]) { 
            i = j;
            t[counter++] = p[i]; // 不重复的存入t数组,然后counter加一
        }
    }
    
    // 输出
    for (i = 0; i < (counter-1); i++) // counter-1就是t数组中存的元素个数
        cout << t[i] << " ";          // 0 1 5 6 7 8 9
 
    return 0;
}

意思是:从数组中下标为0的元素开始向后比较,遇到重复元素忽略,遇到不同元素,就把这个不同元素存入 t 数组,同时再从刚才那个不同元素下标处开始继续向后比较,以此类推。

这行代码:t[0] = p[0];无论数组中下标为0的元素后面的元素重不重复都要加,这是因为while循环比较元素后面的不同元素存入 t 数组,所以下标为0的元素永远不会被存入,直接手动加上就行了。

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值