输入n个整数,输出出现次数大于等于数组长度一半的数。
输入描述:
每个测试输入包含 n个空格分割的n个整数,n不超过100,其中有一个整数出现次数大于等于n/2。
输出描述:
输出出现次数大于等于n/2的数。
示例1
输入
3 9 3 2 5 6 7 3 2 3 3 3
输出
3
代码1:使用ArrayList排序后,中间值即为所求值
scanner.hasNextInt():判断输入
import java.util.*;
public class Count {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
List<Integer> arr = new ArrayList<>();
while (scanner.hasNextInt()) { // 判断输入是否为整型
arr.add(scanner.nextInt()); // 接收输入,以enter作为结束符
}
Collections.sort(arr); // 排序后输出中间值即可
System.out.println(arr.get(arr.size()/2-1));
}
}
逻辑错误:要求的数字长度恰好在数组的前一半或后一半,就会有错误
代码2:
str.split(" "):按照空格切分字符串
Integer.valueOf(str):将数字字符串转为int
import java.util.Scanner;
public class Count2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();
String [] str1 = str.split(" ");
int[] arr = new int[str1.length];
for (int i = 0; i < str1.length; i++) {
arr[i] = Integer.valueOf(str1[i]);
}
countMaxLength(arr);
}
private static void countMaxLength(int[] arr) {
int length = arr.length;
int count;
for (int i = 0; i <= length/2; i++) {
count = 1;
for (int j = i+1; j < length; j++) {
if (arr[i] == arr[j]) {
++count;
}
}
// 因为只有一个整数出现次数大于等于n/2
// 所以一旦找到跳出循环即可
if (count >= length/2) {
System.out.println(arr[i]);
break;
}
}
}
}