链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
问题描述:
Joker今天学完了数组,他发现在数组上面可以进行很多有意思的操作,现在他想对一个长度为n的数组a进行以下操作:
将两个元素 ai和 aj 互换,使得 i≠j、ai和 aj要么 都是偶数,要么 都是奇数。
他想知道是否可以通过执行任意次数(可能为零)的操作对数组进行非递减排序。
输入描述:
第一行输入数据包含一个整数 t (1 <= t <= 1e4) - 测试用例数。
测试用例说明如下。
每个测试用例的第一行包含一个整数 n(1 <= n <= 2 * 10^5) - 数组 a 的长度。
每个测试用例的第二行包含 n 个正整数a1,a2,…,an(1 <= ai <=10^9)--数组 a 的元素。
保证所有测试用例的 n 之和不超过 2 * 10^5; 。
输出描述:
每个测试用例的输出都单独成行:
如果数组可以通过一定次数的操作进行排序,则"Yes";
否则为"No"。
输入:
4 5 7 10 1 3 2 4 11 9 3 5 1 10 5 6 6 4 1 6 输出: Yes Yes Yes No
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int t=sc.nextInt();
for(int i=0;i<t;i++){
int n=sc.nextInt();
int[] ints=new int[n];
for(int j=0;j<n;j++){
ints[j]=sc.nextInt();
}
int[] ints1= Arrays.copyOf(ints,n);
Arrays.sort(ints1);
for(int m=0;m<n;m++){
int min=m;
for(int p=m+1;p<n;p++){
if(ints[p]<ints[min]&&ints[p]%2==ints[min]%2){
min=p;
}
}
int temp=ints[min];
ints[min]=ints[m];
ints[m]=temp;
}
boolean flag=true;
for(int p=0;p<n;p++){
if(ints[p]!=ints1[p]){
flag=false;
System.out.println("No");
break;
}
}
if(flag){
System.out.println("Yes");
}
}
}
}