找出一对是否在一次通过中求和给定目标

时间:2019-05-05 19:11:20

标签: c++11 puzzle

我正在尝试解决以下问题:

Given a list of numbers and a number k, return whether any two numbers from the list add up to k.

For example, given [10, 15, 3, 7] and k of 17, return true since 10 + 7 is 17.

Bonus: Can you do this in one pass?

我对奖金问题感兴趣。

我认为我能够一次通过O(k)空间。但是,我必须假定数字为非负数。

我通过创建大小为k + 1的布尔数组并标记每个元素与k之间的差异为真来做到这一点。如果我到达数组中标记为“ true”的元素,则返回true。如果不是,则返回false。而且,任何满足 k 的元素 x 都会被跳过,因为不能添加任何元素来得出 k。

如果我不做任何假设,我可以通过首先找到给定数组中元素的范围而在两次中完成然后相应地调整我的布尔数组的大小并运行上述算法。

您认为无需任何假设即可一口气做到这一点吗?

如果您想提供解决方案,请放心!只需告诉我,这就是您给我的东西,以便在看您所写的内容之前,我可以先尝试自己解决它。

0 个答案:

没有答案