我之前做了一堂课,我们经历过这种算法,却找不到我的代码。如何在只有1次扫描的阵列中找到第二大数字?
我正在考虑使用节点,但如果最大和第二大节点从同一侧开始,那将会搞砸。一个丑陋的方法是有两个额外的临时变量,并“找到”其中较小的一个。
所以任何人都有任何提示?哦,如果你有代码,这是java。 与此同时,我将尝试在谷歌上搜索更多内容!
答案 0 :(得分:0)
这是我获得第二高数字的方式:
// The array containing number.
int[] number = {1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10};
// The int[] is copied to Integer[] array. This is done because the Arrays class cannot sort primitives (such as int). If any other primitive type, they can be converted to their respective objects.
Integer[] numberInteger = new Integer[number.length];
// Populate the Integer[] with data from int[].
for(int i = 0; i<number.length; i++)
{
numberInteger[i] = number[i];
}
// Sort the Integer[] array in reverse order.
Arrays.sort(numberInteger, Collections.<Integer>reverseOrder());
// Print the result out.
System.out.println("The second highest number is: "+numberInteger[1]);
// Output is~~~~~~~ The second highest number is: 9
如果你有其他原始类型(例如double []),它可以复制到它的相应对象(例如Double [])。
P.S。如果使用Java 8,可以更简单地填充Integer []数组。 Streams可用于填充Integer []。
// Instead of using a for loop, Streams are used.
Integer[] numberInteger = Arrays.stream(number).boxed().toArray(Integer[]::new);