问题描述
在一个整数序列a1, a2, …, an中,如果存在某个数,大于它的整数数量等于小于它的整数数量,则称其为中间数。在一个序列中,可能存在多个下标不相同的中间数,这些中间数的值是相同的。
给定一个整数序列,请找出这个整数序列的中间数的值。
输入格式
输入的第一行包含了一个整数n,表示整数序列中数的个数。
第二行包含n个正整数,依次表示a1, a2, …, an。
输出格式
如果约定序列的中间数存在,则输出中间数的值,否则输出-1表示不存在中间数。
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;
public class Main {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner in=new Scanner(System.in);
Short n=in.nextShort();
Map<Short,Short> map=new TreeMap<>();
for(int i=0;i<n;i++) {
short data=in.nextShort();
if(map.containsKey(data)) {
map.put(data, (short)(map.get(data)+1));
}else {
map.put(data, (short)1);
}
}
Set<Short> set=map.keySet();
List<Short> list=new ArrayList<Short>(set);
//Collections.sort(list);//由于TreeMap是按照键升序排好的,所以不用再排序。
for(int i=0;i<list.size();i++) {
int less=0;
int more=0;
for(int j=i-1;j>=0;j--) {
less+=map.get((short)list.get(j));
}
for(int j=i+1;j<list.size();j++){
more+=map.get((short)list.get(j));
}
if(less==more) {
System.out.print((short)list.get(i));
in.close();
return;
}
}
System.out.println(-1);
in.close();
}
}