问题
检测一个数组里面是否有相同的数,返回一个bool类型。
LeetCode 217 Contains Duplicate
Solutions
用两种方法进行解答
使用HashSet
HashSet是一种不包含重复元素的集合。构造一个空的hashset,只要没出现过的数字就放到hashset里,如果发现一个元素出现过,那么就说明有重复的元素,返回true,代码如下:
#include<iostream>
#include<unordered_set>
#include<vector>
using namespace std;
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
bool result = false;
unordered_set<int> hashSet;
for(int i = 0; i < nums.size(); i++) {
if (hashSet.count(nums[i]) > 0) {
result = true;
} else {
hashSet.insert(nums[i]);
}
}
return result;
}
};
int main() {
vector<int> nums = {1, 2, 3, 4, 4};
Solution solution;
bool result = solution.containsDuplicate(nums);
cout << result << endl;
return 0;
}
先排序,然后依次比较
先对数组进行大小排序,然后从前往后挨个比较,如果两个元素相同,那么一定是挨着的,所以比较的结果就为true,代码如下
#include<iostream>
#include<unordered_set>
#include<vector>
using namespace std;
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
if (nums.empty()) {
return false;
}
bool result = false;
sort(nums.begin(), nums.end());
for (int i = 0; i < nums.size() - 1; i++) {
if (nums[i] == nums[i + 1]) {
result = true;
}
}
return result;
}
};
int main() {
vector<int> nums = {1, 2, 3, 4};
Solution solution;
bool result = solution.containsDuplicate(nums);
cout << result << endl;
return 0;
}
网友评论