找到数组

时间:2015-09-17 13:42:00

标签: arrays algorithm

对于个人项目,我需要找到数组中三个最接近和最大数字的索引,但我找不到算法来做到这一点。

例如,如果数组是:

[1 2 3 59 70]

输出应为

[0 1 2]

或者如果数组是:

[3 6 7 49 50 51 79 81 100]

输出应为

[3 4 5]

有人有想法吗?在此先感谢您的帮助!

修改:

  • 是的,我们可以假设输入已排序。
  • 很抱歉不清楚,但“最近”意味着这三个数字之间的差异必须是最小的。
  • 重要的是这三个数字具有最小的绝对差异。当我有两个具有相同绝对差异的三元组时,我选择最大的三元组,即具有最大总和(三元组)的三元组。

1 个答案:

答案 0 :(得分:2)

您可以线性地遍历数组并检查差异。如果找到相同的差异,请更新当前解决方案:

minDistance = arr[2] - arr[0]
minIndex = 0
for i from 3 to n - 1
    if(arr[i] - arr[i - 2] <= minDistance)
        minIndex = i - 2
        minDistance = arr[i] - arr[i - 2]
return { minIndex, minIndex + 1, minIndex + 2 }