21 谁是老二?
作者: Turbo时间限制: 1S章节: 一维数组
问题描述 :
一维数组中存储不超过100个整型数据,请找出其中第二大的元素,输出这些元素的值以及它们的下标。
注意,由于元素值可能相同,因此具有最大值的元素个数可能不只一个,第二大的元素是比它们小的那些元素。
输入说明 :
用户可输入多组数据,每组数据由两行组成:
第一行:数组元素的个数n
第二行:n个数组元素,由空格分隔
输出说明 :
对于每组输入,输出一行,包含第二大的元素的值以及它们的下标(都是整数),整数之间以空格分隔。如果有多个下标,则下标按从小到大的顺序输出。每行的开头与结尾无多余空格。
每组输出占一行。
如果不存在第二大的元素,则输出"none"(不包含引号)
输入范例 :
3
2 5 4
10
1 3 5 2 4 3 7 5 7 7
5
2 2 2 2 2
输出范例 :
4 2
5 2 7
none
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;
public class test_21 {
/**
* 21 谁是老二?
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n;
String s;
while (sc.hasNext()) {
StringBuilder builder = new StringBuilder();
n = sc.nextInt();
sc.nextLine();
s=sc.nextLine();
String[] split = s.trim().split(" ");
ArrayList<Integer> arrayList = new ArrayList<>(split.length);
for (String str:split) {
arrayList.add(Integer.valueOf(str));
}
Collections.sort(arrayList, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2-o1;
}
});
//2 2 2 2 2
if(arrayList.get(0).equals(arrayList.get(n-1))){
System.out.println("none");
}else{
int num=0;
for (int j = 1; j < arrayList.size(); j++) {
if(arrayList.get(j)<arrayList.get(0)){
num=arrayList.get(j);
break;
}
}
builder.append(num);
for (int j = 0; j < n; j++) {
if(num==Integer.valueOf(split[j])){
builder.append(" ").append(j);
}
}
System.out.println(builder.toString());
}
}
}
}