题解 | #下标数组#
下标数组
https://www.nowcoder.com/practice/2eac3a5a8cee42da8de003ecca29e271
#include <iostream> #include <unordered_map> using namespace std; int main() { int n,m; cin>>n; unordered_map<int,int> mp; long long ans=0; for(int i=1;i<=n;i++){ cin>>m; if(mp.count(i-m)) ans+=mp[i-m]; mp[m-i]++; } cout<<ans<<endl; return 0; } // 64 位输出请用 printf("%lld")
ai+aj=i+j可以转化为ai-i=-(aj-j)。因此在哈希表中仅需存储ai-i以及它出现的次数,对于ai-i需要找到i-ai出现的个数累加到输出即可。