【问题标题】:You are given an array of integers, A1, A2, ..., An [duplicate]你得到一个整数数组,A1,A2,...,An [重复]
【发布时间】:2011-11-19 06:01:46
【问题描述】:

可能重复:
Finding three elements in an array whose sum is closest to an given number

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

【问题讨论】:

  • 我们给了?就我个人而言,我不觉得我有任何阵列。我以为你得到了这个整数数组。
  • 似乎是功课。到目前为止你得到了什么?
  • 询问算法和家庭作业很好(这里的人更喜欢你诚实的时候),但是标记你的问题visual-c++ 好像有人会给你一个视觉 - C++ 程序与您当前对问题的想法是可笑的。

标签: algorithm complexity-theory


【解决方案1】:

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

  1. 按升序排列数字。

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

  3. 从 b = 最小(第一个)数字和 c = 最大(最后一个)数字开始。逐步减小 c,如果这会使 a+b+c 更接近 s。

  4. 然后逐步增加b,每次增加b,如果a+b+c更接近s,就逐步减少c。

【讨论】:

  • 我认为这并不适用于所有情况。差异可以是正面的或负面的(以及要添加的数字 - 然而这与我在这里的反对意见无关)。因此,虽然减少 c 可能会让您更接近预期总和的绝对差,但可能是在增加 b 之后,您需要再次增加 c 才能更接近。
  • @Lucero:方法是正确的。如果 b1
猜你喜欢
  • 2013-08-05
  • 2011-12-20
  • 2020-07-09
  • 1970-01-01
  • 2015-04-15
  • 2020-04-25
  • 1970-01-01
  • 1970-01-01
  • 2012-10-16
相关资源
最近更新 更多