存在重复元素

 

 

解法一:使用老师上课说的排序,然后遍历。使用快速排序时间复杂度是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;

}

 

posted on 2024-04-27 13:15  不是小朋友L  阅读(1)  评论(0编辑  收藏  举报

导航