多益网络2014校招的一道笔试题---左旋字符串
定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。
如把字符串abcdef左旋转2位得到字符串cdefab。
请实现字符串左旋转的函数,分析算法复杂度
当时答的时候用的方法太渣了,
思路是每次左移一位,移动K次。
12345678→23456781→34567812→45678123
这是我写的实现代码
1 void LeftMove(char* str,int k,int n) 2 { 3 k = k%n; 4 if (NULL == str||k<1||n<1) 5 { 6 return; //输出合法性检测 7 } 8 while(k--) 9 { 10 int t = str[0]; 11 for(int i=1;i<n;i++) 12 { 13 str[i-1] = str[i]; 14 } 15 str[n-1] = t; 16 } 17 }
虽然这个算法可以实现数组的循环右移,但是算法复杂度为O(n^2)
后面在别人博客上看见一种比较简单有效而且复杂度比较好的方法---逆序
假设我要移动“12345678”的3位,我可以将字符串分为123,45678两部分
逆序排列123:321
逆序排列45678:87654
全部逆序32187654:45678123
这样也实现了左旋3位数
这是我实现的代码,已测试正确
1 char *Reverse(char *first,char *end) //逆序first指针到end指针之间的字符 2 { 3 char *temp =first; 4 if (first>=end||NULL==first||NULL==end) 5 { 6 return temp; 7 } 8 while (first<end) 9 { 10 swap(*first++,*end--); 11 } 12 return temp; 13 } 14 void swap(char&a,char&b) 15 { 16 char temp = a; 17 a = b; 18 b = temp; 19 } 20 char* LeftMove(char *str,int len,int n) //左旋函数 21 { 22 if (NULL==str||n<0) 23 { 24 return str; 25 } 26 n = n%len; 27 Reverse(str,str+n-1); 28 Reverse(str+n,str+len-1); 29 Reverse(str,str+len-1); 30 return str; 31 }
算法复杂度为O(n)
总之还得再继续努力,特别是在数据结构和算法要下工夫,这样下一次笔试就能胸有成竹了!
转载于:https://www.cnblogs.com/xijiyuan/p/3715191.html
多益网络2014校招的一道笔试题---左旋字符串相关推荐
- 2014 WAP校园招聘笔试题
2014 WAP校园招聘笔试题 Problem's Link: http://www.doc88.com/p-6751117015483.html WAP公司笔试题 We are planning ...
- 华为2018届校招技术岗笔试题及个人解答
前言 昨天(9.13)参加了华为2018届的技术岗笔试,特此总结一下笔试的题目和我个人的解答思路. 笔试题一共是三道编程题,大致是数值反向输出,比较和排序,相对较基础. PS:由于没有截图,所以题目是 ...
- 给定一个数值,输出符合中国人习惯的读法--记一道笔试题
题目:给定一个数字,最大小于一万亿,输出符合中国人习惯的读法,例如: a.12输出:十二 b.102输出:一百零二 c.1002输出:一千零二 d.112输出:一百十二 e.10112输出:一万零一百 ...
- 一道笔试题--求二进制数1的个数
要进一家新公司难免要进行笔试,虽然笔试通过的人很多都有背题之嫌,但是统计意义上最起码可以看出一个程序员的认真程度,毕竟很多公司的考题也不是自己创的,也是在网上偷的,允许公司偷题就必须允许应聘者偷答案. ...
- 蘑菇街2015校招 Java研发笔试题 详解,2015java
蘑菇街2015校招 Java研发笔试题 详解,2015java 1. 对进程和线程描述正确的是( ) A. 父进程里的所有线程共享相同的地址空间,父进程的所有子进程共享相同的地址空间. B. 改变 ...
- C语言单链表实现FCFS算法,2014腾讯实习笔试题
2014腾讯实习笔试题 1. 关于二叉树,下面说法正确的是() A. 对于N个节点的二叉树,其高度为nlog2n; B. 一个具有1025个节点的二叉树,其高度范围在11~1025之间 C. 二叉树的 ...
- C#在类型实例化时都干了什么:从一道笔试题说开去
C#在类型实例化时都干了什么:从一道笔试题说开去 原文来自:http://www.cnblogs.com/instance/archive/2011/05/27/2059409.html 前一阵子我参 ...
- 阿里校招 数据分析师 笔试题
2015年8月19日,阿里校招数据分析师笔试题.共计21题(貌似统计漏了一题,应该是单选少了一题,凑合看吧),选择题每个人的都不一样,问答题是一样的.暂时没有答案,希望对大家有用. 单选题: 1观测宇 ...
- 【机试题】2014大疆嵌入式笔试题(附超详细解答,下篇)
上一篇主要是对<2014大疆嵌入式笔试题>的前一部分进行了解答,本文主要是对接下来的几道题进行解答.想要参考上一篇的点击链接:[机试题]2014大疆嵌入式笔试题(附超详细解答,上篇). 嵌 ...
最新文章
- python---websocket的使用
- java 桶排序_[图解] 桶排序
- 用户重要数据转移方法〖罗斌个人工作经验谈〗
- sp烘焙流程_3分钟带你快速入门substance painter 贴图制作
- 指针嵌套指针 拷贝_C++智能指针小结
- 牛客网-斐波那契数列
- jquery ajax error函数和及其参数详细说明
- python os.urandom 安全_python SystemRandom/os.urandom总是有足够的熵来获得良好的加密
- The ntpath module
- webpack之externals操作三部曲--正确的姿势
- redis 类型、方法
- 第七章:nginx的rewrite规则详解
- 制作并使用9-patch图像
- mysql sql执行慢_Mysql执行查询语句慢的解决方式
- 354.俄罗斯套娃信封问题
- WinHttp c++ 介绍及应用
- Win10永久禁用键盘上的num lock键,解决打字时经常误触的困扰
- 洛谷P2678 Java解法
- Java 17新特性,快到起飞?
- 重复读取输入流InputStream