还是从数据结构开始做吧 慢慢来 题目链接
思路:
- stl中set容器能够自动去重(挖个坑,stl仔细的学一遍),将vector中的数据依次添加进set容器中,若添加后,set容器中的元素数量小于添加次数,即有重复数据。
- set容器的insert()函数 (借鉴自:c语言中文网 (是这样写吗???))
//以普通引用的方式传递 val 值 pair <iterator bool> insert (const_iterator position, const value_type& val); //以右值引用的方式传递 val 值 pair <iterator bool> insert (const_iterator position, value_type&& val);
以上 2 种语法格式的 insert() 方法,返回的都是 pair 类型的值,其包含 2 个数据,一个迭代器和一个 bool 值:
- 当向 set 容器添加元素成功时,该迭代器指向 set 容器新添加的元素,bool 类型的值为 true;
- 如果添加失败,即证明原 set 容器中已存有相同的元素,此时返回的迭代器就指向容器中相同的此元素,同时 bool 类型的值为 false。
所以,当插入时,判断返回值的第二个数据,如果为false即存在相同元素
- 看的别人的代码:先排序,再依次比较相邻两个是否相等。(这么简单我为什么想用set……)
代码:
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
set<int> mySet;
for(int i=0;i<nums.size();i++){
mySet.insert(nums[i]);
if(mySet.size()<i+1){
return true;
}
}
return false;
}
};
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
set<int> mySet;
for(int i=0;i<nums.size();i++){
if(!mySet.insert(nums[i]).second){
return true;
}
}
return false;
}
};
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
int n=nums.size();
sort(nums.begin(),nums.end());
for(int i=0;i<n-1;i++){
if(nums[i]==nums[i+1]){
return true;
}
}
return false;
}
};
|