优先偶数的TopN
2019秋招拼多多笔试题目第一题
读入一个数列和N值,返回按优先级排序的N个数,满足:
(1)所有偶数优先级大于奇数
(2)同为偶数或同为奇数时,数值大的优先级高
输入描述:
每个测试输入的测试用例,包含一个用半角逗号(,)分开的自然数数列和1个参数N,数列和参数N用半角分号(;)隔开。
这里保证N小于数列的元素个数(不超过100)。
输出描述:
在一行内输出N个满足题目条件的自然数,用逗号隔开。
import java.util.Arrays;
import java.util.Scanner;
public class Test11 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNextLine()){
String s = sc.nextLine();
String[] temp = s.split(";");
String[] numbers = temp[0].split(",");
int size = numbers.length;
int[] array = new int[size];
for (int i = 0; i < size; i++) {
array[i] = Integer.parseInt(numbers[i]);
}
int n = Integer.parseInt(temp[1]);
int[] result = getResult(array,size,n);
for (int i = 0; i < n; i++) {
if(i != n - 1){
System.out.print(result[i] + ",");
}else{
System.out.println(result[i]);
}
}
}
}
public static int[] getResult(int[] numbers,int size,int n){
int[] result = new int[n];
int[] ou = new int[size];
int[] ji = new int[size];
for (int i = 0; i < size; i++) {
if(numbers[i] % 2 == 0){
ou[i] = numbers[i];
}else{
ji[i] = numbers[i];
}
}
Arrays.sort(ou);
Arrays.sort(ji);
int count = 0;
for (int i = 0; i < n; i++) {
if(ou[size-i-1] != 0){
result[i] = ou[size-i-1];
count++;
}
}
int j = 0;
for (int i = count; i < n; i++) {
if(ji[size-j-1] != 0){
result[i] = ji[size-j-1];
j++;
}
}
return result;
}
}