在数组中查找某几个和为给定值的数并返回下标
时间: 2024-10-07 22:03:55 浏览: 30
js中删除数组中的某一元素实例(无下标时)
在数组中查找几个元素之和等于特定目标值的问题通常是一个经典的搜索算法问题,可以使用哈希表(散列表)或者双指针法等策略来解决。这里简单介绍一种基于哈希表的方法:
1. **哈希表法(HashMap)**:
- 遍历数组,将每个元素及其索引作为键值对存入哈希表(如Python中的字典)。
- 对于每个元素,计算剩余目标值(初始目标值减去当前元素的值)。
- 如果剩余目标值已经在哈希表中存在,说明找到了一对和为目标值的元素,将其索引添加到结果中,并从哈希表中移除这一对。
- 继续遍历直到找到所有和为目标值的组合或者哈希表为空。
2. **双指针法(Two Pointers)**:
- 这种方法适用于有序数组。设两个指针,一个指向数组开始,另一个指向结束。
- 计算左指针处元素与目标值的差,如果这个差恰好存在于右指针位置,则找到了一对符合条件的元素。
- 将这两个下标记录下来,然后移动较大的指针(使其向左移一位),继续寻找下一个和为目标值的组合。
**示例代码(Python)**:
```python
def find_sum_indices(arr, target):
if not arr or sum(arr) < target: return []
seen = {0: []} # 初始化哈希表,key表示累积和,value表示对应下标
total = 0
for i, num in enumerate(arr):
total += num
diff = target - total
if diff in seen:
return [seen[diff], i] + seen[diff]
seen[total] = [i] # 添加新的累积和和其下标
# 示例
arr = [1, 5, 7, 9, 11]
target = 16
print(find_sum_indices(arr, target)) # 输出可能的一个解:[0, 4]
```
阅读全文