数组循环移动代码,只使用一个临时变量
2009-09-21 18:43
337 查看
算法原理:假如要将数组循环左移i位,则先将数组前i位逆置,再将后n-i位逆置,最后将整个数组逆置。逆置也有小技巧:使用两个游标start、end,将子数组的第一个元素和子数组的最后一个元素交换,然后start++,end--。
#include<iostream> using namespace std; void reverse(char *ch,int start,int end) { while(start <= (start+end)/2) { cout<<"ch[start]="<<ch[start]<<" "<<"ch[end]"<<ch[end]<<endl; char temp; temp = ch[start]; ch[start] = ch[end]; ch[end] = temp; ++start; --end; } } int main() { char ch1[9] = "abcdefgh"; for(int t = 0;t != 8;++t) cout<<ch1[t]; cout<<endl; cout<<"你要将数组左移几位?"; int i; cin>>i; reverse(ch1,0,i-1); for(int t = 0;t != 8;++t) cout<<ch1[t]; cout<<endl; reverse(ch1,i,7); for(int t = 0;t != 8;++t) cout<<ch1[t]; cout<<endl; reverse(ch1,0,7); for(int t = 0;t != 8;++t) cout<<ch1[t]; cout<<endl; return 0; }
相关文章推荐
- 设计算法并写出代码移除字符串中重复的字符,不能使用额外的缓存空间。注意: 可以使用额外的一个或两个变量,但不允许额外再开一个数组拷贝。
- 将一个具有n个元素的数组向左循环移动i个位置,使用O(n)复杂度
- 一个有n个整数的递增有序数组。对它进行向左或向右循环移动若干次后,要求给出一个代码实现,尽可能快地从这个数组中寻找指定值所在的位置
- 不使用循环,如何创建一个长度为100的数组,并且数组的每一个元素是该元素的下标?
- 使用一个for循环打印二维数组和三维数组
- 【重要】攻击动作时间段判断~使用动画time比较动画length和使用一个变量数组做延迟
- MSIL 教程(二):数组、分支、循环、使用不安全代码和如何调用Win32 API
- 10,javase代码实战-循环控制——使用while与自增运算符实现遍历数组(一)
- NSOperationQueue没有必要反复创建临时变量,可以使用一个强引用的NSOperationQueue
- 不良代码展示-不要用数组循环判断等于的方式,来判断一个对象是否在一个集合内
- 【小米校招笔试】一个数组是由有序数组经过n次循环移动后所得,请你用最快速度查找某个元素位置
- 不使用临时变量 依次交换两个已知数组的值
- 【翻译】MSIL 教程(二):数组、分支、循环、使用不安全代码和如何调用Win32 API
- 数组内数据不使用for循环实现多个移动
- 使用临时变量提高Java代码性能 (转)
- GridView其实是一个table,这里使用js循环table,代码如下:
- 在一个升序的但是经过循环移动的数组中查找指定元素
- 不使用循环,如何创建一个长度为100的数组
- velocity模板里循环使用set null给临时变量的问题
- volatile变量在多线程同步时运用的优点: 1、锁一次只允许一个线程访问值,volatile 允许多个线程执行读操作,因此当使用 volatile 保证读代码路径时,要比使用锁执行全部代码路径获得