题目:2364. 统计坏数对的数目
思路:哈希表来记录i-nums[i]的值,每次只需要除掉已遍历的值为i-nums[i]的数量即可,时间复杂度0(n)。
C++版本:
class Solution {
public:
typedef long long LL;
long long countBadPairs(vector<int>& nums) {
unordered_map<LL,int> mp;
LL ans=0;
for(int i=0;i<nums.size();i++){
ans+=(i-mp[i-nums[i]]);
mp[i-nums[i]]++;
}
return ans;
}
};
JAVA版本:
class Solution {
public long countBadPairs(int[] nums) {
Map<Long,Integer> mp = new HashMap<>();
long ans=0;
for(int i=0;i<nums.length;i++){
int tmp=mp.getOrDefault((long)(i-nums[i]),0);
ans+=i-tmp;
mp.put((long)(i-nums[i]),tmp+1);
}
return ans;
}
}
Go版本:
func countBadPairs(nums []int) int64 {
var ans int64 = 0
mp := map[int64]int64{}
for i,num := range nums {
ans += int64(i) - mp[int64(i-num)]
mp[int64(i-num)]++
}
return ans
}