题目描述:
给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。
示例 1:
输入:nums = [1,2,3,1]
输出:true
解释:
元素 1 在下标 0 和 3 出现。
示例 2:
输入:nums = [1,2,3,4]
输出:false
解释:
所有元素都不同。
示例 3:
输入:nums = [1,1,1,3,3,4,3,2,4,2]
输出:true
提示:
1 <= nums.length <= 10^5-10^9 <= nums[i] <= 10^9
碎碎念:乍一看,还以为是用异位和Unity3D 每日一题 算法题_3 -- LeetCode 136. 只出现一次的数字-CSDN博客做的题目,结果仔细一看只是任一元素有没有出现超过两次。
接下来我分别使用排序和哈希表两种解法。按照时间复杂度来看,哈希表会更快,但是实际上使用排序在LeetCode上运行更快,可能是测试用例的问题吧

解法一:排序
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
sort(nums.begin(),nums.end());
int cnt = 1;
for(int i = 0,j = 0;i < nums.size();)
{
j = i + 1;
while(j < nums.size() && nums[j] == nums[j-1])
{
j++;
cnt++;
}
i = j;
if(cnt >= 2)//超过两次就截止
return true;
cnt = 1;
}
return false;
}
};
解法二:哈希表
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
unordered_set<int> s;
for(int i = 0;i < nums.size();i++)
{
if(s.find(nums[i]) != s.end())
return true;
s.insert(nums[i]);
}
return false;
}
};

3489

被折叠的 条评论
为什么被折叠?



