详细题目请[参考链接]
描述:
给定序列 (a1,a2,⋅⋅⋅,an)=(1,2,⋅⋅⋅,n),即 ai=i。
小蓝将对这个序列进行 m 次操作,每次可能是将 a1,a2,⋅⋅⋅,aqi 降序排列,或者将 aqi,aqi+1,⋅⋅⋅,an 升序排列。
请求出操作完成后的序列。
输入格式
输入的第一行包含两个整数 n,m,分别表示序列的长度和操作次数。
接下来 m 行描述对序列的操作,其中第 i 行包含两个整数 pi,qi 表示操作类型和参数。当 pi=0 时,表示将 a1,a2,⋅⋅⋅,aqi 降序排列;当 pi=1 时,表示将 aqi,aqi+1,⋅⋅⋅,an 升序排列。
输出格式
输出一行,包含 n 个整数,相邻的整数之间使用一个空格分隔,表示操作完成后的序列。
分析:
import java.util.Arrays;
import java.util.Scanner;
public class _30_双向排序{
public static void main(String args[]){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt(); //表示序列的长度
int m=sc.nextInt(); //表示操作次数
int a[]=new int[n]; //创建一个数组,用于存储数据
//给数组赋值,实现从a1————an
for(int i=0;i<n;i++){
a[i]=i+1;
}
//m次操作
for(int i=0;i<m;i++){
int pi=sc.nextInt(); //操作类型
int qi=sc.nextInt(); //参数
if(pi==0){
Arrays.sort(a,0,qi); //知识点如下
for(int x=0,y=qi-1;x<y;x++,y--){
int temp=a[x];
a[x]=a[y];
a[y]=temp;
} //通过for语句,进行数组内数据的大小排序,按降序
}else if(pi==1){
Arrays.sort(a,qi-1,n); //知识点如下
}
}
//输出数组
for(int a1:a){ //a1获取的是数组a中的每一个元素的值,而不是数组的下标
System.out.print(a1+" ");
}
}
}
Array.sort()用法
1.Arrays.sort(int[] a);
这种形式是对一个数组的所有元素进行排序,并且是按从小到大的顺序。
2.Arrays.sort(int[] a, int fromIndex, int toIndex)
这种形式是对数组部分排序,也就是对数组a的下标从fromIndex到toIndex-1的元素排序,注意:下标为toIndex的元素不参与排序哦!