1 solutions

  • 0
    @ 2021-11-8 20:44:31

    首先将给的所有位置从小到大排序,假如两个位置之间距离小于等于2就可传递,先用fg标记第一个点,用后面一个数减去fg,假如小于等于2就将计数temp++,大于2就将temp归为1,循环着往前走fg也一直向前移动,再通过过程中的temp和min、max比较,得出最小和最大值。

    #include<bits/stdc++.h>
    using namespace std;
    int main(){
    	int t;
    	cin>>t;
    	while(t--){
    		int n,max=1,min=100000000,j=0;
    		cin>>n;
    		int a[n+5]={0};
    		for(int i=1;i<=n;i++) cin>>a[i];
    		sort(a+1,a+n+1); 
    		int fg=a[1],temp=1;
    		for(int i=2;i<=n;i++){
    			if(abs(a[i]-fg)<=2) temp++;
    			else {
    				if(temp<min)min=temp;
    				if(temp>max)max=temp;
    				temp=1;
    			}
    			fg=a[i];
    		}
    		if(temp<min)min=temp;
    		if(temp>max)max=temp;
    		cout<<min<<" "<<max<<endl;
     	}
    	return 0;
    }
    

    Information

    ID
    153
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    7
    Tags
    # Submissions
    48
    Accepted
    12
    Uploaded By