如何在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个字母的值非常困惑。
答案 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
那个基本上在你的问题中是相同的逻辑,但有一些预先检查,以避免必须代表无穷大(如果你的类型是浮点但对整数不那么有用,那就没关系)
你应该知道,通用解决方案也解决了更具体的问题,假设你的三个整数实际上是某种列表结构。如果你只有三个“裸”值并且你没有专门处理广义情况,那么我将使用上面第一个伪代码块。