解法一:使用老师上课说的排序,然后遍历。使用快速排序时间复杂度是O(nlogn)(这个是快排的时间复杂度)+O(n)(遍历的时间复杂度)=======O(nlogn)
#include <bits/stdc++.h>
using namespace std;
bool containsDuplicate(vector<int> &nums) {
sort(nums.begin(), nums.end());
for (int i = 0; i < nums.size(); i++) {
if (nums[i + 1] == nums[i]) {
return true; } }
return false;
}
int main() {
int n;cin >> n;vector<int>nums;
for (int i = 0; i < n; i++) {
int x; cin >> x; nums.push_back(x); }
if (containsDuplicate(nums)) cout << "true";
else cout << "false";
return 0;
}
解法二:
使用数据结构set,set是集合,然后不能有重复的元素的一种数据结构
因此流程就是在最开始向set里添加元素的时候就直接可以看到是否有重复元素。
因为set.insert(x)插入的返回值,其第一个first的值是插入的x,其第二个值second是这个x是否插入的代表值,1代表插入成功,0代表插入失败。也就是0代表有重复元素。
#include <bits/stdc++.h>
using namespace std;
bool containsDuplicate(vector<int> &nums) {
set<int> se;
for (auto item : nums) {
if (!se.insert(item).second) { // 检查插入是否成功
return true; } }
return false;
}
int main() {
int n;cin >> n;vector<int>nums;
for (int i = 0; i < n; i++) {
int x;cin >> x;nums.push_back(x); }
if (containsDuplicate(nums))
cout << "true";
else
cout << "false";
return 0;
}
标签:插入,存在,set,return,cout,nums,重复,元素,int From: https://www.cnblogs.com/FJCLJ/p/18161950