给定一个整数数组,判断是否存在重复元素。
如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。
示例 1:
输入: [1,2,3,1] 输出: true
示例 2:
输入: [1,2,3,4] 输出: false
示例 3:
输入: [1,1,1,3,3,4,3,2,4,2] 输出: true
解析:
这里利用set去重的功能,把所有元素存储在set里,如果set的大小小于vector,则说明有重复元素,否则,无重复元素。
代码:
bool containsDuplicate(vector<int>& nums)
{
set<int>dup;
for (int i = 0; i < nums.size(); i++)
{
dup.insert(dup.begin(), nums[i]);
}
if (dup.size() < nums.size())
return true;
return false;
}
另一种解法,是参照leetcode上的答案,利用unique函数的功能,unique的作用是“去掉”容器中相邻元素的重复元素(不一定要求数组有序),它会把重复的元素添加到容器末尾(所以数组大小并没有改变),而返回值是去重之后的尾地址。利用这个特性,先对数组进行排序,然后unique相邻去重,查看尾部迭代器的位置。
代码:
bool containsDuplicate(vector<int>& nums) {
sort(nums.begin(),nums.end());
if(unique(nums.begin(),nums.end())==nums.end())
return false;
else
return true;
}