问题描述:将一个具有n个元素的字符串向左循环移动i个位置。例如,假设n=8,i=3,那么字符串abcdefgh移动之后变成defghabc.
对于整数数组1,2,3,4,5,6,7,8,9,10循环向左移动5位的结果为6 7 8 9 10 1 2 3 4 5.
条件: 时间复杂度O(n), 空间复杂度O( 1 ).
手摇法:
将一个具有10个元素的数组(1 2 3 4 5 6 7 8 9 10)想左循环移动5个位置,采用摇手的方法:
先是掌心对着自己,左手在右手的上面,如下图所示:
代码如下:
public class Test {
public static void main(String[] args) {
int[] a={1,2,3,4,5,6,7,8,9,10};
Test.reverse(a, 0, 4); //翻转左手
Test.reverse(a, 5, 9); //翻转右手
Test.reverse(a, 0, a.length-1); //两手整体翻转
}
/**
*
* @param a
* @param start 单次翻转的开始位置
* @param end 单次翻转的结束位置
*/
public static void reverse(int a[],int start,int end){
int temp = 0;
int i = start;
int j = end;
while(i<j){
temp = a[i];
a[i] = a[j];
a[j] = temp;
i++;
j--;
}
for(int k=0;k<a.length;k++){
StdOut.print(a[k]+" ");
}
StdOut.println();
}
}