📅  最后修改于: 2023-12-03 14:58:36.770000             🧑  作者: Mango
这是一道门门CS 2008年考试第66题。这道题目要求编写程序从给定数组中寻找最小值和次小值。如果数组中没有次小值,则输出-1。
{3, 1, 5, 6, 7, 2}
1 2
我们可以使用两个变量来保存最小值和次小值,对于每一个元素,我们判断它是否比最小值小,如果是,则将最小值赋为该元素,将次小值赋为原最小值。
如果该元素不是最小值,但却比次小值小,那么我们更新次小值为该元素。最终输出最小值和次小值即可。如果次小值没有被更新过,则输出-1。
int[] arr = {3, 1, 5, 6, 7, 2};
int min1 = Integer.MAX_VALUE, min2 = Integer.MAX_VALUE;
for(int i=0; i<arr.length; i++){
if(arr[i] < min1){
min2 = min1;
min1 = arr[i];
} else if(arr[i] < min2){
min2 = arr[i];
}
}
if(min2 == Integer.MAX_VALUE){
System.out.println(-1);
} else {
System.out.println(min1 + " " + min2);
}
这里我们使用了Java语言进行实现。对于其他语言,实现思路大致相同,只需要根据具体语言语法进行相应修改即可。