题目
思路
由题意可知需要按差值排序,所以我想到了用集合set(可以自动排序且去重)。
我也看了其他博主的代码,也可以利用map容器、以及不用stl的容器,通过散列遍历(可以参考柳神的)
AC代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int n; cin>>n;
int a[n]={0};
int cha[10001]={0};//记录差值出现的次数
set<int> st;
for(int i=1;i<=n;i++){
cin>>a[i];
cha[abs(i-a[i])]++;
st.insert(abs(i-a[i]));
}
set<int> :: iterator it=st.end();
for(it--;it!=st.begin();it--) {
if(cha[*it]>1){
cout<<*it<<' '<<cha[*it]<<endl;
}
}
if(cha[*it]>1){
cout<<*it<<' '<<cha[*it]<<endl;
}
return 0;
}