给定总和的数组中的PositionTwo元素

时间:2014-02-13 14:38:38

标签: algorithm

如何在数组中找到这样的元素,使得它们的和等于给定的数字k。例如,有一个数组{1,2,4,1,1,5}和k = 2所以元素是{1,1},{1,1,{1,1}。现在我在这里看到一个问题,它给出了https://stackoverflow.com/questions/4259515/given-an-unsorted-array-find-any-two-elements-in-the-array-whose-sum-is-equal-t的解决方案。

现在我有兴趣知道是否有任何方法可以找到这些元素的位置,即它们在数组中的位置。按位置我的意思是他们在数组中的索引号。如果我使用排序然后数组的位置会发生变化,所以我想我不能使用它。是否有任何最佳算法来找到位置。如果我使用散列并且给定的数组有重复,则会出现问题。

2 个答案:

答案 0 :(得分:0)

可以使用哈希映射平均在O(n + m)中完成。 (n是数组的大小,m是输出的大小)。
只需在遍历时存储每个元素及其索引。一旦找到一个与k的补充已经在地图中的元素 - 打印两个索引(一个是迭代中的一个,一个是地图中的值)。

伪代码(使用多图语义 - 每个元素可以附加多个值):

map <- empty hash map
for each e in array at index i:
    if e is in map:
        print i, map.get(e) //current index and already stored indices
    map.add(k-e,i) //add the element to the hash map

答案 1 :(得分:0)

一种方法是拥有Dictionary<int, List<int>>并用项目及其索引填充它。 示例{1, (0,3,4)},{2,(1)}然后检查数组中的每一个,并查看字典中K-item是否different index而不是项目。 顺便说一下,你可以在迭代数组的同时完成这个,所以运行时是O(n)