奇奇偶偶

文章讲述了如何通过在满足特定条件(元素为偶数或奇数)下交换数组元素,判断是否能将数组进行非递减排序。给出一个算法示例和测试用例分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

链接:登录—专业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");
            }


        }
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值