一开始想的很简单,排序一下又对称不就可以了,但是分数出来,只有70分,苦逼了,到第二天精神不错了,就又重新看看代码,,还少考虑一种情况,就是可能左边的相同的数目,少于右边相同的数目,比如1 3 3 3 3 3 ,这个也是返回-1的。。。
70分
import java.util.Arrays;
import java.util.Scanner;
public class _20131201 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] a = new int[n];
for (int i = 0; i < n; i++) {
a[i] = scanner.nextInt();
}
int ret = -1;
if (n != 1) {
Arrays.sort(a);
int length = a.length;
if (length % 2 == 0) {
if (a[length / 2] == a[length / 2 - 1]) {
ret = a[length / 2];
}
} else {
int middle = (length - 1) / 2;
int pre = a[middle - 1];
int next = a[middle + 1];
if ((a[middle] > pre && a[middle] < next) || pre == next) {
ret = a[middle];
}
}
} else {
ret = a[0];
}
System.out.println(ret);
}
}
100分
import java.util.Arrays;
import java.util.Scanner;
/**
* @author kyp
* @time 2019/7/18
* @description 中间数
*/
public class _20161201 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] a = new int[n];
for (int i = 0; i < n; i++) {
a[i] = scanner.nextInt();
}
int ret = -1;
if (n != 1) {
Arrays.sort(a);
int length = a.length;
int min = 0;
int max = 0;
if (length % 2 == 0) {
int middle = length / 2;
if (a[middle] == a[middle - 1]) {
for (int i = 0; i < middle - 1; i++) {
if (a[i] != a[middle - 1]) {
min++;
}
}
for (int j = middle + 1; j < n; j++) {
if (a[j] != a[middle]) {
max++;
}
}
if (max == min) {
ret = a[middle];
}
}
} else {
int middle = (length - 1) / 2;
int pre = a[middle - 1];
int next = a[middle + 1];
if ((a[middle] > pre && a[middle] < next)) {
ret = a[middle];
}
for (int i = 0; i < middle; i++) {
if (a[i] != a[middle]) {
min++;
}
}
for (int j = middle + 1; j < n; j++) {
if (a[j] != a[middle]) {
max++;
}
}
if (max == min) {
ret = a[middle];
}
}
} else {
ret = a[0];
}
System.out.println(ret);
}
}
感觉代码不是很简洁,不过还要向下一题推进,就有空再看看了