Algorithm 在给定和的数组中定位两个元素

Algorithm 在给定和的数组中定位两个元素,algorithm,Algorithm,如何在数组中找到这样的元素,使它们的和等于给定的数字k。例如,有一个数组{1,2,4,1,1,5}和k=2,所以元素是{1,1},{1,1,{1,1}。现在我看到了一个问题,它给出了这个问题的解决方案 现在我想知道是否有任何方法可以找到这些元素的位置,也就是它们在数组中的位置。位置指的是它们在数组中的索引号。如果我使用排序,那么数组的位置会发生变化,所以我想我不能使用它。有没有找到位置的最佳算法。如果我使用哈希和t给定的数组有重复项,那么就有问题了。可以使用哈希映射平均在O(n+m)内完成。(n

如何在数组中找到这样的元素,使它们的和等于给定的数字k。例如,有一个数组{1,2,4,1,1,5}和k=2,所以元素是{1,1},{1,1,{1,1}。现在我看到了一个问题,它给出了这个问题的解决方案

现在我想知道是否有任何方法可以找到这些元素的位置,也就是它们在数组中的位置。位置指的是它们在数组中的索引号。如果我使用排序,那么数组的位置会发生变化,所以我想我不能使用它。有没有找到位置的最佳算法。如果我使用哈希和t给定的数组有重复项,那么就有问题了。

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

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


map一种方法是拥有一个
字典
,并用项目及其索引填充它。 示例
{1,(0,3,4)}、{2,(1)}
,然后检查数组中的每个项,查看字典中是否有
K-item
,其索引与item的索引不同。
顺便说一句,您可以在遍历数组的同时执行此操作,因此运行时是
O(n)

如果存在重复项怎么办?假设{1,1,4}和总和=5@user220789MultIAP语义会打印DUPES,这是想法。如果你不想这样的行为——切换到“正则”映射,并且在打印完之后确定要使元素无效。我不太了解这个,我能用C或C++实现它吗?如果我可以的话,你能向我提供一个我可以了解更多的链接吗?它的实现,谢谢,顺便说一下,它能处理大量的输入大小,比如10 ^ 4或10 ^ 5?@ USER 220789Google Google给了我,我不是C++专家,但是地图的概念相当简单,它基本上非常类似于AD.NET的使用地图的解决方案,每个值实际上是一个列表。谢谢,有东西总比没有好。
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