217. Contains Duplicate

Given an array of integers, find if the array contains any duplicates. Your function should return true if any value appears at least twice in the array, and it should return false if every element is distinct.


思路:由题意知,判断一个整型数组中是否含有重复元素,若存在,返回true,否则返回false。 

第一个元素开始与剩余的元素作比较,看是否相等;若相等就满足至少含有某元素两次,返回true。如果不相等,继续第二个的判断,判断规则一样;如果比较完还没有遇到两个相等的元素,就返回false。

注意:① 该方法容易想到,但有点笨大哭

② 看第二种方法,巧妙的解法!

③ 哈希表法,其实这道题目考察的是哈希表。其中,无序容器unordered_multi/set和unordered_multi/smap都是由哈希表实现,后者是关联容器,前者是无关联容器,它就像一个麻袋!vector也是容器为什么还要用另外的容器呢?多此一举啊!!!微笑vector容器没有成员函数find(),而set容器是有的,具体看代码!微笑以动态数组为结构的vector容器,虽然最为常见,但涉及到查找(find)vector中的元素时,而不是通过迭代器访问容器中元素时,通常需要根据需求选取合适的容器作为vector容器的缓存。


方法1:常规方法

class Solution{
public:
	bool containsDuplicate(vector<int>& nums) {
		if (nums.size() == 0)
			return false;

		for (auto it = nums.begin(); it != nums.end(); ++it)
		{
			for (auto jt = it + 1; jt != nums.end(); ++jt)
			{
				if (*it == *jt)
					return true;
			}
		}
		return false;
	}
};

方法2: 比较vector容器和set容器中元素的数量

class Solution{
public:
	bool containsDuplicate(vector<int> &nums){
		//  定义一个set容器,set容器元素不能重复
		// 用vector的nums给set容器初始化
		set<int> coll(nums.begin(), nums.end());
		return nums.size() > coll.size();	
	}
};

方法3:哈希表法

class Solution{
public:
	bool containsDuplicate(vector<int>& nums) {
		// 无序set容器实现的结构是哈希表,元素不重复
		unordered_set<int> hashset;
		for (auto it = nums.begin(); it != nums.end(); ++it){
			if (hashset.find(*it) != hashset.end()){
				return true;
			}
			else
				hashset.insert(*it);
		}
		return false;
	}
};


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值