没有合适的资源?快使用搜索试试~ 我知道了~
首页程序员编程艺术第一~三十七章集锦
本书来自于编程大神July。下面是他对自己写得书的心得和体会。我尽量把资源分弄的比较低。5分应该不多吧。 从2011年4月写下第一篇至今,编程艺术系列已经写了37章,也就是说详细阐述了37个编程问题,在创作的过程当中,得到了很多朋友的支持,特别是博客上随时都会有朋友不断留言,或提出改进建议,或show出自己的思路、代码,或指正bug,非常感激。 本系列越写到最后,越会发觉无论是面试,还是编程当中遇到的绝大部分问题,都是有规律可循的,而且可以不断优化,这也是自己愿一直写下去的原因。再者,能给每一年找工作的毕业生带去或多或少的参考,给早已参加工作的人提供思维锻炼的机会,何尝不是一种思考与编程的双重乐趣! 编程艺术的继续创作仍需要得到广大读者的更多支持,最近,正在review和优化编程艺术系列,即在徐徐创作新的章节的同时,不断回顾已写的37章,希望能找出所有显而易见的bug,包括优化相关代码,希望有更多的朋友可以随我一起加入review当中。 如你发现任何bug、问题,或有任何建议,欢迎随时在博客上留言反馈,或联系我,我的微博:http://weibo.com/julyweibo,异常感谢。 愿你享受旅途,不断思考,不断收获,have fun! 博客上http://blog.csdn.net/v_july_v 第3 8章再见。 July、二零一三年十二月十日晚于北京天通苑。
资源详情
资源评论
资源推荐

1
程序员编程艺术第一~三十七章集锦
作者:
July
、编程艺术创作组
时间:二零一一年四月
~
二零一三年十二月
出处:
http://blog.csdn.net/v_july_v
本
PDF
制作者:吴新隆
前言
从
2011
年
4
月写下第一篇至今,编程艺术系列已经写了
37
章,也就是说详细阐述了
37
个编程问题,在创作的过程当中,得到了很多朋友的支持,特别是博客上随时都会有朋
友不断留言,或提出改进建议,或
show
出自己的思路、代码,或指正
bug
,非常感激。
本系列越写到最后,越会发觉无论是面试,还是编程当中遇到的绝大部分问题,都是有
规律可循的,而且可以不断优化,这也是自己愿一直写下去的原因。再者,能给每一年找工
作的毕业生带去或多或少的参考,给早已参加工作的人提供思维锻炼的机会,何尝不是一种
思考与编程的双重乐趣!
编程艺术的继续创作仍需要得到广大读者的更多支持,最近,正在
review
和优化编程
艺术系列,即在徐徐创作新的章节的同时,不断回顾已写的
37
章,希望能找出所有显而易
见的
bug
,包括优化相关代码,希望有更多的朋友可以随我一起加入
review
当中。
如你发现任何
bug
、问题,或有任何建议,欢迎随时在博客上留言反馈,或联系我,我
的微博:
http://weibo.com/julyweibo
,异常感谢。
愿你享受旅途,不断思考,不断收获,
have fun
!

2
目录
程序员编程艺术第一~三十七章集锦
......................................................................................
1
前言
.............................................................................................................................................
1
目录
.............................................................................................................................................
2
第一章、左旋转字符串
.............................................................................................................
3
第二章、字符串是否包含问题
..............................................................................................
23
第三章、寻找最小的
k
个数
...................................................................................................
37
第三章续、
Top K
算法问题的实现
.........................................................................................
84
十四、亦第三章再续:快速选择
SELECT
算法的深入分析与实现
..................................
125
第三章三续、求数组中给定下标区间内的第
K
小(大)元素
........................................
145
第四章、现场编写类似
strstr/strcpy/strpbrk
的函数
.........................................................
156
第五章、寻找和为定值的两个或多个数
............................................................................
173
第六章、亲和数问题
--
求解
500
万以内的亲和数
..............................................................
185
第七章、求连续子数组的最大和
........................................................................................
191
第八章、从头至尾漫谈虚函数
............................................................................................
199
第九章、闲话链表追赶问题
................................................................................................
215
第十章、如何给
10^7
个数据量的磁盘文件排序
..............................................................
225
第十一章:最长公共子序列(LCS)问题
..............................................................................
259
第十二
~
十五章:中签概率,
IP
访问次数,回文等问题(初稿)
..................................
271
第十六
~
第二十章:全排列,跳台阶,奇偶排序,第一个只出现一次等问题
..............
285
第二十一~二十二章:出现次数超过一半的数字,最短摘要的生成
.............................
303
第二十三、四章:杨氏矩阵查找,倒排索引关键词
Hash
不重复编码实践
..................
323
第二十五章:二分查找实现(
Jon Bentley
:
90%
程序员无法正确实现)
......................
345
第二十六章:基于给定的文档生成倒排索引的编码与实践
............................................
349
第二十七章:不改变正负数之间相对顺序重新排列数组
.
时间
O(N)
,空间
O(1)
..........
374
第二十八
~
二十九章:最大连续乘积子串、字符串编辑距离
..........................................
382
第三十~三十一章:字符串转换成整数,带通配符的字符串匹配
.................................
403
第三十二~三十三章:最小操作数,木块砌墙问题
..........................................................
434
第三十四~三十五章:格子取数,完美洗牌算法
..............................................................
468
第三十六
~
三十七章、搜索智能提示
suggestion
,附近地点搜索
...................................
496
后记
.........................................................................................................................................
513

3
第一章、左旋转字符串
作者:July,yansha、caopengcs。
时间:二零一一年四月十四日。
题目描述:
定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾
部,如把字符串 abcdef 左旋转 2 位得到字符串 cdefab。请实现字符串左旋转的
函数,要求对长度为 n 的字符串操作的时间复杂度为 O(n),空间复杂度为 O(1)。
思路一、暴力移位法
初看此题,咱们最先想到的笨方法可能就是一位一位移动,故咱们写一个函
数叫做 leftshiftone(char *s,int n) 完成左移动一位的功能
void leftshiftone(char *s,int n) {
char t = s[0]; //保存第一个字符
for (int i = 1; i < n; ++i) {
s[i - 1] = s[i];
}
s[n - 1] = t;
}
如此,左移 m 位的话,可以如下实现:
void leftshift(char *s,int n,int m) {
while (m--) {
leftshiftone(s, n);
}
}
思路二、指针翻转法
咱们先来看个例子,如下:abc defghi,若要让 abc 移动至最后的过程可以
是:abc defghi->def abcghi->def ghiabc

4
如此,我们可定义俩指针,p1 指向 ch[0],p2 指向 ch[m];
一下过程循环 m 次,交换 p1 和 p2 所指元素,然后 p1++, p2++;。
1. 第一步,交换 abc 和 def ,abc defghi->def abcghi
2. 第二步,交换 abc 和 ghi,def abcghi->def ghiabc
整个过程,看起来,就是 abc 一步一步 向后移动
abc defghi
def abcghi
def ghi abc
//最后的 复杂度是 O(m+n)
图解如下:

5
由上述例子九个元素的序列 abcdefghi,您已经看到,m=3 时,p2 恰好指到
了数组最后一个元素,于是,上述思路没有问题。但如果上面例子中 i 的后面
还有元素列?
即,如果是要左旋十个元素的序列:abcdefghij,ok,下面,就举这个例子,
对 abcdefghij 序列进行左旋转操作:
如果 abcdef ghij 要变成 defghij abc:
abcdef ghij
1. def abc ghij
2. def ghi abc j //接下来,j 步步前移
3. def ghi ab jc
4. def ghi a j bc
5. def ghi j abc
下面,再针对上述过程,画个图清晰说明下,如下所示:
剩余523页未读,继续阅读








安全验证
文档复制为VIP权益,开通VIP直接复制

评论0