给定N个整数Ai以及一个整数C,问其中有几对元素满足相减等于C
时间: 2024-03-17 16:45:45 浏览: 110
好的,这个问题比较容易解决。您可以使用双重循环枚举每一对元素,然后判断它们的差是否等于C,如果等于C,则计数器加1。Java代码如下:
```java
public static int countPairs(int[] nums, int c) {
int count = 0;
for (int i = 0; i < nums.length; i++) {
for (int j = i + 1; j < nums.length; j++) {
if (nums[i] - nums[j] == c || nums[j] - nums[i] == c) {
count++;
}
}
}
return count;
}
```
其中,nums是整数数组,c是给定的整数,函数返回满足条件的元素对个数。
另外,如果您的数组较大,双重循环可能会导致时间复杂度过高,可以考虑使用哈希表来优化算法。具体做法是,首先将数组中的所有元素存入哈希表中,然后再遍历数组,对于每个元素,判断它所需的另一个元素是否在哈希表中即可。Java代码如下:
```java
public static int countPairs(int[] nums, int c) {
int count = 0;
Map<Integer, Integer> map = new HashMap<>();
for (int num : nums) {
map.put(num, map.getOrDefault(num, 0) + 1);
}
for (int num : nums) {
if (map.containsKey(num - c)) {
count += map.get(num - c);
}
if (map.containsKey(num + c)) {
count += map.get(num + c);
}
// 避免重复计数
if (c == 0) {
count--;
}
}
return count / 2;
}
```
其中,map是哈希表,count是计数器,函数返回满足条件的元素对个数。注意,最后需要将计数器除以2,因为每对元素会被计数两次。此外,如果C等于0,为避免重复计数,还需要将计数器减去数组中0元素的个数。
阅读全文