LC217题————存在重复元素

题目类型:简单

Posted by xie96808 on February 25, 2022

解题思路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;
}