计算 的所有可能值a_w + a_x,将它们插入到哈希表中。将 (a_w + a_x, w) 和 (a_w + a_x, x) 插入到第二个哈希表中。
在将值插入到第一个哈希表之前,请检查该值是否已在表中。如果是这样,请检查第二个表。如果 (a_w + a_x, w) 或 (a_w + a_x, x) 存在,则不要插入任何内容(我们有一个重复元素)。如果这两对都不在第二个表中,我们就得到了肯定的答案。
如果在处理完所有 (w, x) 对后,我们没有得到肯定的答案,则意味着不存在这样的成对不同索引。
时间复杂度为O(n 2 )。空间要求也是 O(n 2 )。
可以在 O(n) 空间但 O(n 2 * log(n)) 时间内执行相同的操作,并稍微修改此答案中的算法:Sum-subset with a fixed subset size:
a_w + a_x键和w, x值。预先用n-1元素填充此队列,其中 x = 0 且 w = 1 .. n-1。(sum, w, x)并将元素放入(a_w + a_x_plus_1, w, x+1)队列中(但当 x >= w 时不要放入元素)。当从队列中删除的两个连续元素具有相同的总和时停止。