题目
有 n 个整数,使其前面各数顺序向后移 m 个位置,最后 m 个数变成最前面的 m 个数,比如输入数字为 1 2 3 4 5 6 7 8 9 0,m=4,则结果为 7 8 9 0 1 2 3 4 5 6
具体方法是:
- 将前面n-m个元素逆置;
- 再将剩余元素逆置;
- 最后整体逆置一遍即可!
以下
public class Problem36 {
// 数组转置,x为数组,a、b分别是需要转置的数组范围下标
public static void reverse(int[]x, int a , int b){
int temp;
// 注意条件是i<j即可停止 i-> <-j
for(int i = a ,j =b; i<j; i++,j--){
temp = x[i];
x[i]=x[j];
x[j]=temp;
}
//打印本次转置后的结果
for(int i=0; i<x.length;i++){
System.out.print(x[i]+" ");
}
System.out.println();
}
public static void main(String[] args) {
int[] arr ={1,2,3,4,5,6,7,8,9,0};
int m=4 ;
int n =arr.length;
//下面要注意的就是几个边界值,哪里到哪里转置
reverse(arr,0,n-1-m);
reverse(arr,n-m,n-1);
//整体翻转一次
System.out.println("最后的结果如下:");
reverse(arr,0,n-1);
}
}
结果如下:
这题应该是在学数据结构的最开始的时候就能接触到的。所以我翻开了书,照着写好了- - (回想起了当年在学校自学数据结构的时候觉得这个方法太厉害了……