算法练习第八周(B)
程序员文章站
2022-07-14 14:13:09
...
题意:给定两个数组啊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");
}
}
}
上一篇: 11. 盛最多水的容器 双指针
下一篇: Learning Day Web