第 2 章 第 3 题 数组旋转问题 翻转算法实现
2014-04-01 21:08
260 查看
问题分析
输入:目标数组,旋转位数。
处理:将目标数组旋转指定的位数。
约束:无
解答思路
将对象数组拆分成 a b 两个部分:a 表示要移动到尾端的部分 b表示要移动到前端的部分。
根据翻转算法的思想,可以按如下步骤完成旋转操作:
1. 将 a 部分逆置
2. 将 b 部分逆置
3. 将整个数组逆置
代码实现
小结
这是数组翻转操作中最经典最常用的一个算法,应熟练掌握之。
输入:目标数组,旋转位数。
处理:将目标数组旋转指定的位数。
约束:无
解答思路
将对象数组拆分成 a b 两个部分:a 表示要移动到尾端的部分 b表示要移动到前端的部分。
根据翻转算法的思想,可以按如下步骤完成旋转操作:
1. 将 a 部分逆置
2. 将 b 部分逆置
3. 将整个数组逆置
代码实现
#include <iostream> using namespace std; // 数组旋转函数 void rotate(int *array, int n, int r); // 逆置函数 void reverse(int *array, int n); int main(void) { // 建立并初始化,输出测试数组。 int array[10]; int n=10; for (int i=0; i<10; i++) { array[i] = i+1; } cout << "目标数组:" << endl; for (int i=0; i<10; i++) { cout << array[i] << " "; } cout << endl; // 获取旋转位数 int r; cout << "旋转位数:"; cin >> r; // 处理旋转位数 if (r<0) { cout << "非法的旋转位数" << endl; return 0; } else r %= n; // 调用数组旋转函数 rotate(array, n, r); // 打印旋转结果 cout << endl << "旋转后的数组:" << endl; for (int i=0; i<10; i++) { cout << array[i] << " "; } cout << endl; return 0; } void rotate(int *array, int n, int r) { // 翻转 a 部分 reverse(array, r); // 翻转 b 部分 reverse(array+r, n-r); // 翻转对象数组 reverse(array, n); } void reverse(int *array, int n) { int tem = 0; for (int i=0; i<=(n-1)/2; i++) { tem = array[i]; array[i] = array[n-i-1]; array[n-i-1] = tem; } }
小结
这是数组翻转操作中最经典最常用的一个算法,应熟练掌握之。
相关文章推荐
- 第 2 章 第 3 题 数组旋转问题 杂技算法实现
- 第 2 章 第 3 题 数组旋转问题 平移算法实现1
- 第 2 章 第 3 题 数组旋转问题 平移算法实现2
- 【LeetCode-面试算法经典-Java实现】【081-Search in Rotated Sorted Array II(搜索旋转的排序数组)】
- 用两个栈实现队列、旋转数组的最小数、斐波那契数列、青蛙跳台阶、矩形覆盖 --漫漫算法路 刷题篇
- (旋转数组问题)给定一个整数类型的循环有序数组,求循环数组的特定值,使用二分查找法(JAVA实现)
- 【LeetCode-面试算法经典-Java实现】【189-Rotate Array(旋转数组)】
- 求旋转数组的最小数字算法的解析以及完整c语言代码实现
- JAVA实现旋转数组的最小数字问题(《剑指offer》)
- 算法导论 4.1-5 最大子数组问题 线性时间算法 C++简单实现
- 【LeetCode-面试算法经典-Java实现】【153-Find Minimum in Rotated Sorted Array(找旋转数组中的最小数字)】
- 关于《四元数插值算法实现游戏角色平滑旋转》中的算法一些问题
- 【LeetCode-面试算法经典-Java实现】【154-Find Minimum in Rotated Sorted Array II(找旋转数组中的最小数字II)】
- 【LeetCode-面试算法经典-Java实现】【033-Search in Rotated Sorted Array(在旋转数组中搜索)】
- JAVA实现旋转数组的最小数字问题(《剑指offer》)
- 【算法——Python实现】滑动窗口解决数组问题
- 【算法学习】剑指offer问题8——旋转数组
- 第 1 章 第 3 题 空间敏感排序问题 位向量实现( 数组位向量 )
- 算法导论之最大子数组问题 C语言实现
- 算法导论-最大子数组问题-线性时间复杂度算法分析与实现