设计算法判断数列a[1...n]中是否有a[i]+a[j]=k
时间: 2024-09-25 22:03:36 浏览: 37
为了设计一个算法来判断数组 `a[1...n]` 中是否存在两个元素 `a[i]` 和 `a[j]`,使得它们的和等于给定的目标值 `k`,我们可以采用哈希表的数据结构来提高查找效率。这里是一个简单的步骤:
1. 创建一个空的哈希集合(如 Python 的 set 或 Java 的 HashSet)来存储已遇到的数值。
2. 遍历数组 `a`,从索引 0 开始:
a. 对于每个元素 `a[i]`:
i. 检查 `k - a[i]` 是否在哈希集合中。如果在,说明找到了一对满足条件的元素(因为 `a[i] + (k - a[i]) = k`),可以直接返回 True。
ii. 将当前元素 `a[i]` 添加到哈希集合中,以便后续检查。
3. 如果遍历完整个数组都没有找到满足条件的组合,那么返回 False。
这是一个线性的解决方案,时间复杂度为 O(n)。以下是 Python 代码示例:
```python
def contains_pair(a, n, k):
visited = set()
for i in range(n):
complement = k - a[i]
if complement in visited:
return True
visited.add(a[i])
return False
# 示例用法
arr = [1, 2, 3, 4, 5]
k = 6
print(contains_pair(arr, len(arr), k)) # 输出:True(因为 3+3=6)
```
阅读全文