目录
一、前言
二、去重函数 Unique()
✨头文件
✨用法与作用
✨注意点
三、常考面试题
四、共勉
一、前言
经常刷算法题的朋友,肯定会经常看到题目中提到 去重 这样的字眼,或者需要我们通过 去重 来解题,由于之前对 去重 了解的不太清楚,导致做题的时候总会卡住,所以收集了一些资料来详解Unique。
二、去重函数 Unique()
✨头文件
unique函数 是STL 中比较实用的函数之一
包含该函数的函数头文件为
#include <algorithm>
✨用法与作用
- 函数作用:“去除”容器或数组中相邻元素之间重复出现的元素(所以一般使用前需要排序)。
- 函数参数:第一个参数是集合的起始地址,第二个参数是集合的最后一个元素的下一个元素的地址(其实还有第三个参数,比较函数,但是几乎不用,就不说了,其实和sort函数很像)。
int a[5]={1,4,2,7,2};sort(a,a+5);unique(a,a+5);
去重后不相同元素的个数:就是函数返回值减去集合的初始位置。
int len=unique(a,a+5)-a;//去重后不相同元素的个数
✨注意点
- a 这里的删除不是真的delete,而是将重复的元素放到容器末尾
- c 一定要先对数组进行排序才可以使用unique函数
- b unique函数的返回值是去重之后的尾地址
int main()
{int myints[] = { 10,20,20,20,30,30,20,20,10 }; vector<int> myvector(myints, myints + 9);cout << "去重前" << endl;for (int i = 0; i < 9; i++){cout << myvector[i] << " ";}cout << endl;sort(myvector.begin(), myvector.end());vector<int>::iterator it;it = unique(myvector.begin(), myvector.end()); // 10 20 30 20 10 ? ? ?myvector.resize(distance(myvector.begin(), it)); // 10 20 30 20 10cout << "去重后" << endl;for (it = myvector.begin(); it != myvector.end(); it++){cout << *it << " ";}cout << endl;return 0;
}
三、常考面试题
题目:存在重复元素
链接:217. 存在重复元素
class Solution {
public:bool containsDuplicate(vector<int>& nums) {sort(nums.begin(),nums.end());int len = nums.size();int m = unique(nums.begin(),nums.end()) - nums.begin();if(m!=len){return true;}else{return false;}}
};
四、共勉
以下就是我对 Unique 函数 的理解,如果有不懂和发现问题的小伙伴,请在评论区说出来哦,同时我还会继续更新对 C++ 的更新,请持续关注我哦!!!