欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

算法练习第八周(B)

程序员文章站 2022-07-14 14:13:09
...

算法练习第八周(B)
算法练习第八周(B)
题意:给定两个数组啊a,b,第二个数组相当于第一个数组的交换下标,可以对a[b[i]]和b[i+1]进行任意次的交换,使得数组a为升序排序得的数组

思路:使用三个for循环,然后遍历数组的得到每个情况,判断该数能否同他后面且小于于他的数交换,不可以直接跳出,得到NO

import java.util.Scanner;
public class 练习 {
 public static void main(String[] args) {
  Scanner sc=new Scanner(System.in);
  for(int t=sc.nextInt();t>0;t--) {
   int n=sc.nextInt();
   int m=sc.nextInt();
   int a[]=new int [110];
   int b[]=new int [110];
   for(int i=0; i<n; i++)
             a[i]=sc.nextInt();
         for(int i=0; i<m; i++){
             int x=sc.nextInt();
             b[x-1]=1;  //下标转换
         }
         int flag = 0;
         for(int i=0; i<n; i++){
             flag=0;
             for(int j=i+1; j<n; j++) {  //双层循环,对比所有情况
                 if(a[i]>a[j]){  //找需要交换的位置
                     for(int k=i; k<j; k++) //若i到j存在不能执行交换的位置,跳出
                         if(b[k]==0){
                             flag=1;break;
                         }
                 }
                 if(flag==1) break;
             }
             if(flag==1) break;
         }
         if(flag==1)System.out.println("No");
         else System.out.println("Yes");
  }
 }
}
相关标签: 算法题目