编写一个算法,找到a,b和c中的第二个最小值

时间:2013-09-16 00:50:58

标签: algorithm

如何在Java中找到a,b和c中的第二个最小值?

Find-2nd-Smallest (n: array)  
  smallest : infinity  
  2nd-smallest : infinity  
  for each i in n    
    if i < smallest      
      2nd-smallest = smallest      
      smallest = i    
    else if i < 2nd-smallest      
      2nd-smallest = i  
  return 2nd-smallest

我如何使其适用于(a,b,c)?我对如何获得只有3个字母的值非常困惑。

2 个答案:

答案 0 :(得分:2)

您给出的伪代码中的函数可以找到数组中最小和最小的值。

在阵列{a,b,c}上运行它。

答案 1 :(得分:1)

如果只有三个值,你可以使用一个非常简单的函数(下面的伪代码):

def second_smallest (a,b,c):
    if a < b:
        if b < c:
            return b
        return c
    if a < c:
        return a
    return c

显然如果有三个以上的数字会变得非常笨重但是那时(参见YAGNI),你会把它转换成更通用的解决方案。

这将是:

def second_smallest (list):
    if list.size < 2:
        throw error "not enough numbers"
    if list[0] < list[1]:
        first = list[0]
        second = list[1]
    else:
        first = list[1]
        second = list[0]
    for each index 2 through list.size - 1 inclusive:
        if list[index] < first:
            second = first
            first = list[index]
            next for
        if list[index] < second:
            second = list[index]
    return second

那个基本上在你的问题中是相同的逻辑,但有一些预先检查,以避免必须代表无穷大(如果你的类型是浮点但对整数不那么有用,那就没关系)

你应该知道,通用解决方案也解决了更具体的问题,假设你的三个整数实际上是某种列表结构。如果你只有三个“裸”值并且你没有专门处理广义情况,那么我将使用上面第一个伪代码块。