解题思路1:
使用unordered_set来解决问题. 我认为这道题比较重要的点在于:x的值在不断更新,如果哈希表中找到了任意一个x,那么返回true;否则返回false.
代码如下:
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
unordered_set<int> s;
for(auto x : nums) //使用变量a遍历数组
{
if(s.find(x) != s.end()) //哈希表find函数——新元素如果已经在哈希表中出现过,就马上执行下面的语句;
{
return true;
}
s.insert(x); //如果没出现过,就把这个数加入哈希表
}
return false;
}
};
解题思路2:
有网友给出了极为暴力的解法:
代码如下:
bool containsDuplicate(vector<int>& nums) {
return set<int>(nums.begin(), nums.end()).size() != nums.size();
}
这也太秀了。。核心思想为:set不允许有重复元素出现,因此只需要比较set和nums的size,就可以得知nums是否含有重复元素了。
扩展延伸
既然我知道set可以做“删除重复元素”这个事情,那么我是不是就可以用set实现各种删除重复的事情?
//删除重复元素——利用set删除
void deleteDuplicate(vector<int> &nums) {
set<int> a (nums.begin(), nums.end());
//set<int> ::iterator it; //可以用这个,删去下面的auto即可
for (auto it = a.begin(); it != a.end(); it++) { //如果不定义迭代器,直接上auto就行!不过下面要打印的还是it指向的元素,切记。
cout << *it << endl;
}
}
int main() {
vector<int> a = { 3,5,4,2,1,1,5,3 };
deleteDuplicate(a);
return 0;
}