蓝桥杯排个序1264

题目:

应该还有更方便的写法,但太晚了懒得研究就直接丢上来了

思路:实际上代码就是冒泡排序里面塞了个if。用二维数组存数据,一行存要被换的数组a,一行用来标记能被换的位置(这里我把能换的位置标记为1)。然后进排序循环,如果前一个数a[i] > 后一个数a[i+1],且i这个位置在设定的数组里标记为1,则能交换。至于能被换的位置是“索引”还是“第几个数”要看题目示例,这个题目*可爱的*就是第二个。

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
        int n = scan.nextInt();
        int m = scan.nextInt();
        int[] a = new int[n];
        int[] p = new int[m];
        //用二维数组标记出能换的索引,第1行为数组a,第二行用1来标记能换的位置(即pi)
        int[][] ap = new int[n][2];
        for(int i = 0; i < n; i++){
          a[i] = scan.nextInt();
          ap[i][0] = a[i];
          ap[i][1] = 0;
        }
        for(int i = 0; i < m; i++){
          p[i] = scan.nextInt();
        }
        for(int i = 0; i < m; i++){
          int x = p[i];
          ap[x-1][1] = 1;//要-1(题目说的应该不是哪个索引能换而是第几个数能换)
        }

        for(int i = 0; i < n; i++){
          for(int j = i+1; j < n; j++){
            if(a[i] > a[j] && ap[i][1] == 1){
              int t = a[i];
              a[i] = a[j];
              a[j] = t;
            }
          }
        }
          
        
        // 检查数组a是否按升序排列
        boolean isSorted = true;
        for (int i = 0; i < n - 1; i++) { // 修复循环条件,避免i+1越界
            if (a[i] > a[i + 1]) {
                isSorted = false;
                break;
            }
        }
        
        // 输出结果
        if (isSorted) {
            System.out.println("YES");
        } else {
            System.out.println("NO");
        }

        scan.close();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值