2011-09-17 78 views
0

可能重复:
Finding three elements in an array whose sum is closest to an given number您将得到一个整数数组,A1,A2,...,一个

现在给你一个整数数组,A1,A2, ...,An,包括负数和正数,以及另一个整数S.现在我们需要在数组中找到三个不同的整数,其总和最接近于给定的整数S.如果存在多个解,则它们中的任何一个都是好。有没有一种算法可以在O(n^2)时间内找到三个整数?

+7

给予我们了吗?就我个人而言,我不觉得我有任何阵列。我以为你给了这个整数数组。 –

+0

似乎是功课。你到目前为止有什么? –

+3

可以问一下关于算法的问题,并询问有关家庭作业的内容(当你对此坦诚时,这里的人更喜欢),但将你的问题标记为“visual-C++”,好像有人会给你一个带有思想的Visual-C++程序您目前投入的问题很荒唐。 –

回答

4

是的。你想找到a,b,c和a + b + c尽可能接近s。

  1. 按递增顺序排列数字。

  2. 尝试每个a值。对于每个a值,执行以下步骤:

  3. 以b =最小(第一个)数字和c =最大(最后)数字开始。如果这使得+ b + c更接近于s,则逐步降低c。

  4. 然后逐步增加b,每次增加b时,如果使+ b + c更接近s,则逐步降低c。

+2

我不认为这会适用于所有情况。差异可以是正面的也可以是负面的(还有要添加的数字 - 但这与我的反对意见无关)。所以,虽然减少C可能会让你更接近于预期总和的绝对差距,但可能会在增加B之后再次增加C以更加接近。 – Lucero

+0

@Lucero:该方法是正确的。如果b1 <= b2且c1是b1的最佳c,而c2是b2的最佳c,则c2 <= c1。 – user763305

相关问题