一尘不染

找到三元组中间值的最快方法?

algorithm

给定的是三个数值的数组,我想知道三个数值的中间值。

问题是, 找到这三个中间* 值的 最快 方法是什么? *

我的方法是这种模式-因为有三个数字,所以有六个排列:

if (array[randomIndexA] >= array[randomIndexB] &&
    array[randomIndexB] >= array[randomIndexC])

如果有人可以帮助我找到 更优雅更快捷的 方法,那将非常好。


阅读 437

收藏
2020-07-28

共1个答案

一尘不染

如果您正在寻找最有效的解决方案,我会想象这是这样的:

if (array[randomIndexA] > array[randomIndexB]) {
  if (array[randomIndexB] > array[randomIndexC]) {
    return "b is the middle value";
  } else if (array[randomIndexA] > array[randomIndexC]) {
    return "c is the middle value";
  } else {
    return "a is the middle value";
  }
} else {
  if (array[randomIndexA] > array[randomIndexC]) {
    return "a is the middle value";
  } else if (array[randomIndexB] > array[randomIndexC]) {
    return "c is the middle value";
  } else {
    return "b is the middle value";
  }
}

这种方法需要至少两个和最多三个比较。它故意忽略了两个值相等的可能性(就像您的问题一样):如果这很重要,则可以扩展该方法来检查它。

2020-07-28