0

如何在 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 个字母获得值感到非常困惑。

4

2 回答 2

2

您提供的此伪代码中的函数查找数组中的最小值和第二最小值。

在数组 {a,b,c} 上运行它。

于 2013-09-16T01:10:07.007 回答
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

这与您的问题中的逻辑基本相同,但需要进行一些预先检查以避免必须表示无穷大(如果您的类型是浮点数但对整数没有那么有用,那就可以了)。

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

于 2013-09-16T00:59:05.267 回答