数组循环移位(左旋转字符串)
2013-08-17 17:05
543 查看
数组循环移位
设计一个算法,把一个含有N个元素的数组循环移位K位,要求时间复杂度为O(N),且只允许使用两个附加变量No.1 K abcd1234→ 4abcd123→....
代码如下:/* * 数组移位第一种方法,一位一位的移动 * arr要移动的数组 K移动的位数 * 时间复杂度O(N^2) */ public static String rotateFirst(String rotateSting,int K) { char[] arr=rotateSting.toCharArray();; int N= arr.length; K %= N; //如果K>N,则K-N之后的数组序列跟移动K位是一样的 while(K!=0) { arr[0]=arr[N-1]; //先给arr[0]赋值 for(int i=N-1;i>0;i--) //倒者赋值 { arr[i]=arr[i-1]; } K--; } return new String(arr); }
No.2 逆序
/* * 数组移位第二种方法 * 1.逆序排列abcd: abcd1234 → dcba1234 * 2.逆序排列1234: dcba1234 → dcba4321 * 3.全部逆序 dcba4321 → 1234abcd * 时间复杂度 O(N)线性时间 */ public static String rotateSecond(String rotateSting,int K) { char[] arr=rotateSting.toCharArray();; int N= arr.length; K %= N; //如果K>N,则K-N之后的数组序列跟移动K位是一样的 arr=Reverse(arr,0,K-1); arr=Reverse(arr,K,N-1); arr=Reverse(arr,0,N-1); return new String(arr); } /* * 逆序 * arr逆序数组 be逆序开始位置 en结束位置 */ public static char[] Reverse(char[] arr,int be,int en) { for(;be<en;be++,en--) { char temp=arr[en]; arr[en]=arr[be]; arr[be]=temp; } return arr; }
相关文章推荐
- 旋转字符串;编程珠玑第二章;rotate a one-dimensional vector;循环移位数组;编程之美
- 编程之美的2.17,数组循环移位 & 字符串逆转(反转) Hello world Welcome => Welcome world Hello
- 编程之美2.17—数组循环移位(旋转数组)
- alg : 字符串按照字符进行循环移位(左旋转 or 右旋转)
- 数组循环移位O(n) AND 按单词反转字符串
- 每天学习一点编程(14)(数组/字符串循环移位)
- 数组元素几个关于串的小算法题:最小K个数、连续子数组的最大和、字符串全排列求法、数组循环移位
- 【转】字符串循环移位(左旋转)问题
- 【程序员编程艺术】学习记录2:左旋转字符串之循环移位法
- 旋转字符串(循环移位,rotate)
- 几个关于串的小算法题:最小K个数、连续子数组的最大和、字符串全排列求法、数组循环移位
- 数组循环移位
- Vue-切割json数组字符串并循环输出
- java里如何实现循环打印出字符串或字符串数组里的内容
- 字符串左旋--循环移位法(c++实现)
- 数组循环移位
- [字符串] 一个巧妙的字符串循环移位法
- 旋转字符串一:暴力移位法
- 判断一个给定的字符串通过循环移位是否可以包含另一个字符串
- 判断一个给定的字符串通过循环移位是否可以包含另一个字符串