程序员编程艺术总结

原文链接:http://blog.csdn.net/v_JULY_v/article/category/784066

第一章、左旋转字符串
题目描述:
定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。
如把字符串abcdef左旋转2位得到字符串cdefab。
请实现字符串左旋转的函数,要求对长度为n的字符串操作的时间复杂度为O(n),空间复杂度为O(1)。
第一节、左旋转字符串
第二节、两个指针逐步翻转
第三节、通过递归转换,缩小问题之规模
第四节、stl::rotate 算法的步步深入
第五节、总结
链接:http://blog.csdn.net/v_july_v/article/details/6322882

第二章、字符串是否包含及匹配/查找/转换/拷贝问题
第一节、两个字符串是否包含的问题
  1.1、O(n*m)的轮询方法
  1.2、O(mlogm)+O(nlogn)+O(m+n)的排序方法
  1.3、O(n+m)的计数排序方法
第二节 寻求线性时间的解法
  2.1、O(n+m)的hashtable的方法
  2.2、O(n+m)的数组存储方法
第三节、O(n)到O(n+m)的素数方法
第四节、字符串是否包含问题的继续补充
  4.1、Bit-map
  4.2、移位操作
第五节、字符串相关问题扩展
  5.1、字符串匹配问题
  5.2、在字符串中查找子串
    扩展:在一个字符串中找到第一个只出现一次的字符
  5.3、字符串转换为整数
  5.4、字符串拷贝
原文链接:http://blog.csdn.net/v_july_v/article/details/6347454

第三章、寻找最小的k个数
链接:http://blog.csdn.net/v_july_v/article/details/6370650
第三章续、Top K算法问题的实现
链接:http://blog.csdn.net/v_july_v/article/details/6403777

第三章再续:快速选择SELECT算法的深入分析与实现
链接:http://blog.csdn.net/v_JULY_v/article/details/6431001

第三章三续、求数组中给定下标区间内的第K小(大)元素
链接:http://blog.csdn.net/v_JULY_v/article/details/6452100

第四章、现场编写类似strstr/strcpy/strpbrk的函数
第一节、字符串查找
1.1题目描述:
给定一个字符串A,要求在A中查找一个子串B。
如A="ABCDF",要你在A中查找子串B=“CD”。
1.2、题目描述
在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。
第二节、字符串拷贝
题目描述:要求实现库函数strcpy,
原型声明:extern char *strcpy(char *dest,char *src);
功能:把src所指由NULL结束的字符串复制到dest所指的数组中。  
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。
char * strcpy( char *strDest, const char *strSrc )     
{    
    if(strDest == strSrc) { return strDest; } 
    assert( (strDest != NULL) && (strSrc != NULL) );    
    char *address = strDest;     
    while( (*strDest++ = * strSrc++) != '/0' );     
    return address;    
}
第三节、小部分库函数的实现
链接:http://blog.csdn.net/v_july_v/article/details/6417600

第五章、寻找满足和为定值的两个或多个数
第一节、寻找和为定值的两个数
题目:输入一个数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。
要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。
例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。
第二节、寻找和为定值的多个数
编程求解:输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数,
使其和等于 m ,要求将其中所有的可能组合列出来。
链接:http://blog.csdn.net/v_july_v/article/details/6419466

第六章、求解500万以内的亲和数
第一节、亲和数问题
题目描述:求500万以内的所有亲和数。
如果两个数a和b,a的所有真因数之和等于b,b的所有真因数之和等于a,则称a,b是一对亲和数。
例如220和284,1184和1210,2620和2924。
第二节、伴随数组线性遍历
第三节、程序的构造与解释
链接:http://blog.csdn.net/v_july_v/article/details/6441279

第七章、求连续子数组的最大和
第一节、求子数组的最大和
题目描述:输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为O(n)。
例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。
链接:http://blog.csdn.net/v_july_v/article/details/6444021

第八章、从头至尾漫谈虚函数
链接:http://blog.csdn.net/v_july_v/article/details/6446364

第九章、闲话链表追赶问题
第一节、求链表倒数第k个结点
第13题、题目描述:输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第0个结点为链表的尾指针。
分析:此题一出,相信,稍微有点 经验的同志,都会说到:设置两个指针p1,p2,首先p1和p2都指向head,然后p2向前走k步,这样p1和p2之间就间隔k个节点,最后p1和p2同时向前移动,直至p2走到链表末尾。
第二节、编程判断两个链表是否相交
扩展1:如何编写代码来判断链表是否有环呢?
扩展2:求两个链表相交的第一个节点。
链接:http://blog.csdn.net/v_july_v/article/details/6447013

第十章、如何给10^7个数据量的磁盘文件排序
第一节、如何给磁盘文件排序
问题描述:输入:给定一个文件,里面最多含有n个不重复的正整数(也就是说可能含有少于n个不重复正整数),且其中每个数都小于等于n,n=10^7。
输出:得到按从小到大升序排列的包含所有输入的整数的列表。
条件:最多有大约1MB的内存空间可用,但磁盘空间足够。且要求运行时间在5分钟以下,10秒为最佳结果。
第二节、多路归并算法的c++实现
第三节、磁盘文件排序的编程实现
第四节、多路归并算法的c实现
链接:http://blog.csdn.net/v_july_v/article/details/6451990

十道海量数据处理面试题与十个方法大总结
链接:http://blog.csdn.net/v_JULY_v/article/details/6279498

第一----十章集锦与总结(教你如何编程)
链接:http://blog.csdn.net/v_july_v/article/details/6460494

资料下载链接:http://download.csdn.net/detail/klcf0220/6416357

http://download.csdn.net/detail/klcf0220/6681451

原文地址:https://www.cnblogs.com/klcf0220/p/3366373.html