存在重复元素
给定一个整数数组,判断是否存在重复元素。
如果任意一值在数组中出现至少两次,函数返回 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
题解
方法一:
用unordered_map来存储不同元素在nums中出现的次数。(unordered_map是基于哈希表实现的,对unordered_map进行遍历,输出结果是无序的;map是基于红黑树实现的,对map进行遍历,输出结果是有序的。因而unordered_map的效率高于map)
bool containsDuplicate(vector<int>& nums) {
unordered_map<int,int> m;
for(int i:nums){
m[i]++;
if(m[i]>1) return true;
}
return false;
}
方法二:
给nums中的元素排序,判断是否有相等的两个相邻元素。
bool containsDuplicate(vector<int>& nums) {
if(nums.size()<=1) return false;
sort(nums.begin(),nums.end());
for(int i=0;i<nums.size()-1;i++){
if(nums[i]==nums[i+1]) return true;
}
return false;
}
方法三:
利用set中不能存放两个相同元素的特性,将vector的元素全部存储到set中,比较vector和set的大小,若不相等,则说明有重复元素出现。
bool containsDuplicate(vector<int>& nums) {
return nums.size()!=unordered_set(nums.begin(),nums.end()).size();
}