题源力扣:
给你一个整数数组 nums
。如果任一值在数组中出现 至少两次 ,返回 true
;如果数组中每个元素互不相同,返回 false
。
C++:
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
int len0=nums.size();
//将nums排序
sort(nums.begin(),nums.end());
//unique()+erase()删除相邻重复元素
vector<int>::iterator it=unique(nums.begin(),nums.end());
nums.erase(it,nums.end());
int len1=nums.size();
if(len1<len0)
return true;//若存在重复元素则nums长度减小
else
return false;
}
};
另解:哈希表法
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
map<int,int> hsmap;
bool flag=false;
//遍历,若已存在哈希表中则表示重复,跳出输出true
for(int i=0;i<nums.size();i++){
if(hsmap.find(nums[i])==hsmap.end())
hsmap.insert(pair<int,int>(nums[i],0));
else{//否则,将该数加入哈希表
flag=true;
break;
}
}
return flag;
}
};
另解C语言:排序后遍历,若相邻元素相同则退出