这是Google of Greater China Test for New Grads of 2014 Round A 第3题,题目:Sorting
这题最简单,要求奇数和偶数分开排序,排序后奇数还是只能在原来是奇数的那些位置,偶数还是只能在原来是偶数的那些位置。奇数升序,偶数降序。
最简单的做法:将奇数和偶数分开到两个数组
奇数递增排好序
偶数递减排好序
扫描原数组,如果遇到奇数,从奇数数组中取出第一个放入,从奇数数组中删除该元素;如果遇到偶数,从偶数数组中取出第一个放入,从偶数数组中删除该元素。
返回结果.
package rounda;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;
public class Problem2 {
public void solve() {
}
public static void output(int no,ArrayList<Integer> list) {
String s = "";
for(int i=0;i< list.size();i++)
s+=list.get(i)+" ";
s = s.trim();
System.out.println("Case #"+no+": "+s);
}
public static void main(String[] args) {
Scanner scanner;
scanner = new Scanner(System.in);
int T = scanner.nextInt();
int count = T;
while (count-- > 0) {
int n = scanner.nextInt();
ArrayList<Integer> list = new ArrayList<Integer>();
ArrayList<Integer> even = new ArrayList<Integer>();
ArrayList<Integer> odd = new ArrayList<Integer>();
ArrayList<Integer> result = new ArrayList<Integer>();
for(int i=0;i<n;i++){
int next = scanner.nextInt();
list.add(next);
if(next%2==0)
even.add(next);
else
odd.add(next);
}
Collections.sort(even, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2-o1;
}
});
Collections.sort(odd, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1-o2;
}
});
int peven=0;
int podd=0;
for(int i=0;i<list.size();i++){
if(list.get(i)%2==0){
result.add(even.get(peven));
peven++;
}else{
result.add(odd.get(podd));
podd++;
}
}
output(T-count,result);
}
}
}