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.
Example 1:
Input: [1,2,3,1]
Output: true
Example 2:
Input: [1,2,3,4]
Output: false
Example 3:
Input: [1,1,1,3,3,4,3,2,4,2]
Output: true
我的答案:
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
unordered_set<int> nums_set(nums.begin(), nums.end());
return nums_set.size() < nums.size();
}
};
Runtime: 60 ms, faster than 71.39% of C++ online submissions for Contains Duplicate.
Memory Usage: 20.6 MB, less than 44.96% of C++ online submissions for Contains Duplicate.
此处用set会慢一点
评论区有一种解法快很多:
C++ solution faster than 99.72%
bool containsDuplicate(vector<int>& nums) {
int n=nums.size();
if(n<2) return false;
int mini=*min_element(nums.begin(),nums.end());
int maxi=*max_element(nums.begin(),nums.end());
int f[maxi-mini+1];
memset(f,0,sizeof(f));
for(int i=0;i<n;i++)
{
f[nums[i]-mini]++;
if(f[nums[i]-mini]>1)
return true;
}
return false;
}
网友评论