2 条题解

  • 1
    @ 2024-1-13 20:29:42

    也可以用count+find 枚举,把枚举的结果放入set(去重),之后遍历一遍数组,数组元素在set内找到则计数器加一,时间复杂度O(n^2logn+nlogn)也就是o(n^2logn),思路很清晰。

    c++

    #include <iostream>
    #include <vector>
    #include <set>
    
    using namespace std;
    
    int main()
    {
    int n;
    cin >> n;
    vector<int> v(n);
    set<int> se;
    for (int i = 0; i < v.size(); i++)
    cin >> v[i];
    for (int i = 0; i < v.size(); i++)
    for (int j = i + 1; j < v.size(); j++)
    se.insert(v[i] + v[j]);
    int Count = 0;
    for (int i = 0; i < v.size(); i++)
    if (se.find(v[i]) != se.end())
    Count++;
    cout << Count;
    return 0;
    }
    • 1
      @ 2024-1-13 20:19:25

      #STL set题解

      ###STL大法好

      一想到去重,那么我们就可以把元素丢到一个集合里。

      从此不用担心重复问题。

      基本思路:

      创建一个查找集合,一个去重答案集合

      (由于集合的插入和查找的时间复杂度皆为O(log n),加上这题n的数据范围只有100,所以可以使用集合)

      枚举。

      时间复杂度? $$O(n^2logn)$$ 吧

      #include <cstdio>
      #include <iostream>
      #include <set>
      using namespace std;
      set<int> num; // 查找用集合 
      set<int> res; // 去重用集合 
      int n,a[105],tmp;
      int main(){
          //freopen("count.in","r",stdin);
          //freopen("count.out","w",stdout);
          cin>>n;
          for(int i=1;i<=n;++i){
              cin>>a[i]; //输入数值 
              num.insert(a[i]); //用集合方便查找 
          }
          for(int i=1;i<=n;++i){ //枚举a[i] 
              for(int j=i+1;j<=n;++j){ //枚举a[j] 
                  int tmp=a[i]+a[j]; //接下来定义tmp,它是所枚举的两数之和 
                  set<int>::iterator it=num.find(tmp); // 直接在集合中查找tmp
                  //注意,find函数返回的是一个迭代器,所以要用一个迭代器来存储find的返回值
                  if(it!=num.end()) { // 在find中,如果没有找到集合中的元素,那么迭代器会在集合的末尾。
                  //所以如果it不在集合末尾,那么说明it在集合中出现过 
                  res.insert(*it); //在去重集合中插入 
              }
              }
          }
          cout<<res.size();//直接输出集合内元素数量 
          return 0;
      }
      
      • 1

      信息

      ID
      464
      时间
      1000ms
      内存
      256MiB
      难度
      8
      标签
      递交数
      21
      已通过
      6
      上传者