如何找到数组中的第二大元素,这是我的代码,但我无法弄清楚问题,非常感谢帮助
import java.util.Arrays;
import java.util.Random;
public class NDlargest
{
Random random = new Random();
private int[] array = new int[10];
private int largest;
private int largest2;
public NDlargest()
{
largest = 0;
largest2 = 0;
for (int i =0; i< array.length; i++)
{
array[i] = 1 + random.nextInt(100);
}
System.out.println(Arrays.toString(array));
}
public int getLargest()
{
for (int i = 0; i < array.length; i++)
{
int number = array[i];
if (number > largest)
{
largest = number;
}
}
return largest;
}
public int getSecondLargest()
{
for (int i = 0; i < array.length; i++)
{
int number2 = array[i];
if (largest2 < largest)
{
if (number2 > largest2)
{
largest2 = number2;
}
}
else
{
break;
}
}
return largest2;
}}
答案 0 :(得分:3)
int number2 = array[i];
// here is the problem
if (largest2 < largest)
请替换为以下内容。
int number2 = array[i];
if (number2 < largest)
您的方法的优化版本很少。
public int getLargest()
{
for (int i = 0; i < array.length; i++)
{
if (array[i] > largest)
{
largest = array[i];
}
}
return largest;
}
public int getSecondLargest()
{
for (int i = 0; i < array.length; i++)
{
if (array[i] < largest)
{
if (array[i] > largest2)
{
largest2 = array[i];
}
}
}
return largest2;
}
答案 1 :(得分:0)
更改您的getSecondLargest()
代码,如:
public int getSecondLargest() {
Arrays.sort(array);
largest2=array[array.length-2];
return largest2;
}
答案 2 :(得分:0)
首先询问为什么在查找第二大数字的代码中需要中断?从本质上讲,如果不查看列表中的所有数字,您能找到第二大数字吗?
然后,要了解在列表中查找第k个元素而不进行排序的一般解决方案,请查看http://pine.cs.yale.edu/pinewiki/QuickSelect。