在已经具有最低值的情况下,仅使用循环获取数组中第二个最低值



我正试图弄清楚如何从用户输入的数组中获得倒数第二的值。

为了获得最低值,我这样做了:

int min = Integer.MAX_VALUE;
for(int i = 0; i<array.length; i++) {
if( array[i] < min ) {
min = array[i];
}
}

为了获得第二低的值,我尝试了这个

int secMin = 0;

for(int i = 0; i<array.length-1; i++) {
if(array[i+1] > array[i]) {
secMin = array[i];
}
}

输出不一致,这意味着有时它是正确的,有时它不是。我试过改变循环和语句,但这只是猜测,我没有取得任何真正的进展。有什么建议吗?

如果您想将其作为两个单独的循环进行,只需对min值执行相同的操作,但在查找时跳过min值。

// Find lowest value
int min = Integer.MAX_VALUE;
for (int value : array) {
if (value < min) {
min = value;
}
}
// Find second-lowest value
int secMin = Integer.MAX_VALUE;
for (int value : array) {
if (value != min) { // Skip/ignore lowest value
if (value < secMin) {
secMin = value;
}
}
}

你当然可以把它结合起来:

// Find second-lowest value
int secMin = Integer.MAX_VALUE;
for (int value : array)
if (value != min && value < secMin)
secMin = value;

您只需更新第一个循环,即可同时查找min和secMin。试试这个:

int min = Integer.MAX_VALUE;
int secmin = Integer.MAX_VALUE;
for(int i = 0; i<array.length; i++) {
if( array[i] < min ) {
secmin = min; // the min is now second min
min = array[i]; // the curent value becomes min                
} else if ( array[i] < secmin ){
// if the value is greater than min but still less than second min then...
secmin = array[i];
} 
}

我还没有测试过,但这些东西应该可以

这里描述了另一种方法。

最新更新