1 solutions

  • 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
    7
    Tags
    # Submissions
    21
    Accepted
    9
    Uploaded By