找到第二个最小值 - 算法

时间:2016-09-22 17:48:59

标签: algorithm data-structures

我想找到三个数字的第二个最小值。

我有一个获取两个输入数字的黑盒子,黑盒子返回数字之间的最大值。

此外,我有一个黑盒子,返回最小值。

现在我有一个盒子可以输入3个数字作为输入,它需要返回第二个分钟。

你可以帮我解决这个问题吗? 如何仅使用两个黑盒来解决这个问题?

谢谢!

2 个答案:

答案 0 :(得分:1)

我可以通过黑盒子的三种用途看到这种方法。让我们假设每个元素都是a,b,c。用c找到a和b的最小值。然后你找到这2个答案的最大值,你有第二个分钟。如果只返回b,则会找到a和c的最小值。

答案 1 :(得分:1)

Inputs: a, b, c

Level 1 (filtering out the biggest value):
min(a,b) -> min_ab
min(a,c) -> min_ac
min(b,c) -> min_bc

Level 2 (selecting the highest remaining value, step 1):
max(min_ab, min_bc) -> m*

Level 3 (step 2):
max(m*, min_ac) -> solution

Gives a total of 5 boxes.

a --+--\
    |   min --\
b -----<       max --\
    |   min --/       max --
c -----<             /
    |   min --------/
    \--/

Alternatively you can do 3 maxes first and then 2 mins.