问题描述
小明要组织一台晚会,总共准备了n个节目。然后晚会的时间有限,他只能最终选择其中的m个节目。
这n个节目是按照小明设想的顺序给定的,顺序不能改变。小明发现,观众对于晚上的喜欢程度与前几个节目的好看程度有非常大的关系,他希望选出的第-个节目尽可能好看,在此前提下希望第二个节目尽可能好看,依次类推。
小明给每个节目定义了一个好看值,请你帮助小明选择出m个节目,满足他的要求。
输入格式
输入的第一行包含两个整数n, m,示节目的数量和要选择的数量。
第二行包含n个整数,依次为每个节目的好看值。
输出格式
输出一行包含m个整数,为选出的节目的好看值。
样例输入
53
31254
样例输出
354
样例说明
选择了第1, 4, 5个节目。
评测用例规模与约定
对于30%的评测用例,1<=n<=20;
对于60%的评测用例,1 <= n <= 100;
对于所有评测用例,1 <= n <= 100000, 0 <=节目的好看值<=100000。
思路:一堆数字里面取最大的m个数,按顺序输出就行。
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int m = scanner.nextInt();
int[] arr1 = new int[n + 1]; // 数组下标从1开始
for (int i = 1; i < arr1.length; i++) {
arr1[i] = scanner.nextInt();
}
int[] arr2 = Arrays.copyOf(arr1, n + 1); // 复制arr1数组,下标从1开始
for (int i = 1; i < arr2.length; i++) {
for (int j = 1; j < arr2.length - 1; j++) {
int min = arr2[1]; // 冒泡排序
if (arr2[j] > arr2[i]) {
min = arr2[j];
arr2[j] = arr2[i];
arr2[i] = min;
}
}
}
for (int i = 1; i < arr1.length; i++) {
for (int j = arr2.length - 1; j >= m; j--) { // 取后边最大的数字
if (arr1[i] == arr2[j]) { // 判断相同输出
System.out.print(arr1[i] + " ");
break;
}
}
}
}