2 solutions

  • 1
    @ 2026-10-11 13:32:51
    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
    	freopen("random.in","r",stdin);
    	freopen("random.out","w",stdout);
    	int n;
    	cin>>n;
    	set<int> s;
    	for(int i=1;i<=n;i++)
    	{
    		int a;
    		cin>>a;
    		s.insert(a);
    	}
    	cout<<s.size()<<endl;
    	for(auto x:s)
    	{
    		cout<<x<<" ";
    	}
    	return 0;
    }
    
    
    • 0
      @ 2024-6-4 15:44:10

      1.冒泡排序+最长平台

      时间复杂度(On2On^2)

      #include<bits/stdc++.h>
      using namespace std;
      //冒泡+最长平台 
      const int N=110; 
      int a[N]; //原始数组 
      int main()
      {
      	int n;
      	cin>>n;
      	for(int i=1;i<=n;i++) //数组 
      	{
      		cin>>a[i];
      	}
      	for(int i=1;i<=n;i++) //冒泡排序 
      	{
      		for(int j=1;j+1<=n-i+1;j++)
      		{
      			if(a[j]>a[j+1])
      			{
      				int t=a[j];
      				a[j]=a[j+1];
      				a[j+1]=t;
      			}
      		}
      	}
      	int cnt=0;
      	//最长平台计算平台数目 
      	for(int i=1;i<=n;i++)
      	{
      		int j=i;
      		while(j<=n&&a[i]==a[j]) j++;
      		j--;
      		cnt++; //平台数目增加一个 
      		i=j;
      	}
      	cout<<cnt<<endl;
      	//最长平台输出每个数 
      	for(int i=1;i<=n;i++)
      	{
      		int j=i;
      		while(j<=n&&a[i]==a[j]) j++;
      		j--;
      		cout<<a[i]<<" ";
      		i=j;
      	}
      	return 0;
      }
      

      2.标记

      标记所有的数组,然后对数据范围进行统计查找

      时间复杂度O(n+m)

      #include<bits/stdc++.h>
      using namespace std;
      //标记 
      const int M=1010;
      bool st[M]; //标记数组 
      int main()
      {
      	int n;
      	cin>>n;
      	for(int i=1;i<=n;i++) //标记所有的元素 
      	{
      		int x;
      		cin>>x;
      		st[x]=1;
      	}
      	int cnt=0;
      	for(int i=1;i<M;i++)
      	{
      		if(st[i]==1)
      		{
      			cnt++;
      		}
      	}
      	cout<<cnt<<endl;//输出去重以后的元素个数
      	for(int i=1;i<M;i++)
      	{
      		if(st[i]==1)
      		{
      			cout<<i<<" ";
      		}
      	}
      	return 0;
      }
      

      3.set

      利用set的排序去重,时间复杂度O(nlgn)O(nlg^n)

      #include <bits/stdc++.h>
      using namespace std;
      int main()
      {
          set<int> h; 
          int n;
          cin>>n;
          for(int i=1;i<=n;i++)
          {
              int m;
              cin>>m;
              h.insert(m); //插入元素
          }
          cout<<h.size()<<endl;
          for(auto x:h) //输出集合中的所有元素
          {
              cout<<x<<" ";
          }
          return 0;
      }
      

      4.使用stl进行排序去重

      时间复杂度O(nlogn)O(nlog^n)

      #include<bits/stdc++.h>
      using namespace std;
      const int N=110;
      int a[N];
      int main()
      {
      	int n;
      	cin>>n;
      	for(int i=1;i<=n;i++)
      	{
      		cin>>a[i];
      	}
      	sort(a+1,a+n+1); //排序 
      	int k=unique(a+1,a+n+1)-(a+1); //去重 
      	cout<<k<<endl;
      	for(int i=1;i<=k;i++)
      	{
      		cout<<a[i]<<" ";
      	}
      	return 0;
      }
      
      • 1

      Information

      ID
      413
      Time
      1000ms
      Memory
      128MiB
      Difficulty
      1
      Tags
      # Submissions
      49
      Accepted
      19
      Uploaded By