杭电oj1011题答案,备注什么语言
时间: 2024-10-12 11:18:14 浏览: 6
杭电OJ 1011题目通常是指“数字之和”,这是一道经典的动态规划问题,常用于考察数组操作和基本数学思维。题目通常是让你计算给定数组中所有非负整数对(i, j),使得 i < j,并且 a[i] + a[j] = target 的数量。
解决这个问题的一种常见思路是使用哈希表存储每个数字出现的次数,然后遍历数组,对于每一个元素a[i],利用哈希表找到目标值target - a[i]对应的计数,这个计数就是满足条件的配对数。
这里没有直接提供代码,因为每种编程语言的解决方案可能会有所不同。例如,在Python中,你可以这样做:
```python
def numPairsSumTarget(nums, target):
count = collections.Counter(nums)
pairs = 0
for num in nums:
pairs += count[target - num]
return pairs // 2 # 注意除以2避免重复计数
```
在Java中,你会看到类似这样的代码:
```java
import java.util.HashMap;
public int numPairsSumToTarget(int[] nums, int target) {
HashMap<Integer, Integer> map = new HashMap<>();
int sum = 0;
for (int num : nums) {
sum += map.getOrDefault(target - num, 0);
map.put(num, map.getOrDefault(num, 0) + 1);
}
return sum / 2; // 注意处理可能存在的重复计数
}
```