/**
- 众数是指一组数据中出现次数量多的那个数,众数可以是多个
- 中位数是指把一组数据从小到大排列,最中间的那个数,如果这组数据的个数是奇数,那最中间那个就是中位数,如果这组数据的个数为偶数,那就把中间的两个数之和除以2,所得的结果就是中位数
- 查找整型数组中元素的众数并组成一个新的数组,求新数组的中位数
- 输入描述:
- 输入一个一维整型数组,数组大小取值范围 0<N<1000,数组中每个元素取值范围 0<E<1000
- 输出描述:
- 输出众数组成的新数组的中位数
- 示例1:
- 输入
- 10 11 21 19 21 17 21 16 21 18 15
- 输出
- 21
- 示例2:
- 输入
- 2 1 5 4 3 3 9 2 7 4 6 2 15 4 2 4
- 输出
- 3
*/
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
String[] s = input.split(" ");
int[] nums = new int[s.length];
for (int i = 0; i < nums.length; i++) {
nums[i] = Integer.parseInt(s[i]);
}
scanner.close();
Map<Integer, Integer> map = new HashMap();
for (int i = 0; i < nums.length; i++) {
if (!map.keySet().contains(nums[i])) {
map.put(nums[i], 1);
} else {
int val = map.get(nums[i]).intValue() + 1;
map.put(nums[i], val);
}
}
int max = 0;
List<Integer> list = new ArrayList();
Iterator<Map.Entry<Integer, Integer>> iterator = map.entrySet().iterator();
//计算最多出现的次数
for (int i : map.values()) {
if (i > max) {
max = i;
}
}
//找到众数
for (int key : map.keySet()) {
if (map.get(key) == max) {
list.add(key);
}
}
//寻找中位数
list.sort(new Comparator() {
@Override
public int compare(Object o1, Object o2) {
return (Integer) o1 - (Integer) o2;
}
});
int n = list.size();
if (n % 2 == 0) {
System.out.println((list.get(n / 2) + list.get(n / 2 - 1)) / 2);
} else {
System.out.println(list.get(n/2));
}
}