- 题目

- 思路
- 开一个hashTable,下标表示差值,值表示该差值出现的次数,最后从最大的和开始输出值>=2的项就好了~~
#include <stdio.h>
#include <cmath>
#include <algorithm>
using namespace std;
int hashTable[10000]={0};
int main(){
int n;
scanf("%d",&n);
int temp,max=-1;
for(int i=0;i<n;i++){
scanf("%d",&temp);
if(abs(i+1-temp)>max){ //标记最大的差值
max=abs(i+1-temp);
}
hashTable[abs(i+1-temp)]++; //差值相同,该差值的数量增加1
}
int ans[10000],cnt=0;
for(int i=max;i>=0;i--){
if(hashTable[i]>=2){
printf("%d %d\n",i,hashTable[i]);
}
}
return 0;
}
本文介绍了一种使用哈希表解决数组中特定差值出现次数的问题,通过记录差值及其频率,实现了从最大差值开始输出所有出现次数大于等于2的差值项。代码采用C++实现,展示了如何利用哈希表高效解决问题。
177

被折叠的 条评论
为什么被折叠?



