向量旋转算法《编程珠玑》第二章笔记
来源:互联网 发布:淘宝c店女装排行榜 编辑:程序博客网 时间:2024/05/22 01:31
只需要公约数趟for循环便可以旋转完毕。
如果是rotdist=2,i=0那么交换依次就是2,4,6,所以需要第二次i=1,依次交换3,5,7便可
如果是rotdist=3,i=0,交换3,6,然后就是9因为大于总数8,所以从9-8=1继续交换,依次是1,4,7,之后的10大于8所以从10-8=2继续开始依次是2,5 结束。
记录的不太清楚,下面是代码实现。
public static void main(String[] args) {System.out.println(rotate(new char[]{'a','b','c','d','e','f','g','h'},3));}//左旋转rotdist位置public static char[] rotate(char[] x,int rotdist){for(int i=0;i<gcd(rotdist,x.length);i++){char temp=x[i];int j=i;while(true){int k=j+rotdist;if(k>=x.length)k -= x.length;if( k == i)break;x[j] = x[k];j=k;System.out.println(x);}x[j]=temp;}return x;}//求最大公约数public static int gcd(int i,int j){while( i !=j){if(i>j) i-=j;else j-=i;}return i;}
还有一种方法:
public static char[] reverse(char[] x,int a,int b){char temp;while(a<b){temp=x[a];x[a]=x[b];x[b]=temp;a++;b--;}return x;}
public static void main(String[] args) {char[] x = new char[]{'a','b','c','d','e','f','g','h'};int rot=3,n=x.length;x=reverse(x,0,rot-1);x=reverse(x,rot,n-1);x=reverse(x,0,n-1);System.out.println(x);}
阅读全文
0 0
- 向量旋转算法《编程珠玑》第二章笔记
- 编程珠玑-第二章旋转算法篇
- 编程珠玑第二章旋转算法
- 编程珠玑第二章习题—向量的旋转
- 编程珠玑---第二章---n元一维向量向左旋转
- 编程珠玑之第二章questionB: n元一维向量旋转问题
- 编程珠玑第二章问题B: n元一维向量旋转问题之java实现
- rotate旋转分析(编程珠玑第二章)
- 编程珠玑 第二章 算法
- 编程珠玑--旋转算法
- 编程珠玑 一维向量左旋转
- 编程珠玑一维向量旋转
- 第二章 啊哈!算法 (向量旋转)
- 《编程珠玑》 第二章 算法 习题
- 编程珠玑第二章的算法实现
- 《编程珠玑》--第二章 啊哈!算法
- 【编程珠玑】第二章:啊哈,算法
- 变位词算法(编程珠玑第二章)
- -fobjc-arc 和 -fno-objc-arc 的使用
- 【面试题】剑指offer28--字符串的排列
- Java经典五十道题41-50
- HDU 3652 数位DP 解题报告
- STL的使用
- 向量旋转算法《编程珠玑》第二章笔记
- Hadoop-CDH5.11.0版本安装-双节点完整版
- 软件著作权的审查
- statsmodels 的result classes
- App冷启动,你还要我怎样?
- Oracle使用to_char,to_number,to_date转换函数
- Hive SQL 解析过程
- 实时监听输入框值变化的完美方案:oninput & onpropertychang
- 人脸识别keras实现教程