
剑指offer
文章平均质量分 77
Saray_
这个作者很懒,什么都没留下…
展开
-
8+查找一个旋转数组的最小元素
title: 查找一个旋转数组a中的最小元素(首尾下标:start,end) 旋转数组就是将一个有序数组的前n个元素移到数组的尾部,形成类似bitonic序列 (先递增再递减或者先递减再递增)的数组 thought: 方法:采用二分查找的方法(O(logn)), 当中间值不小于第一个元素,则最小元素在中间值后面; 当中间值不大于最末元素,则最大值在中间值前原创 2015-08-26 20:22:54 · 562 阅读 · 0 评论 -
03+在一个有序的二维数组中查找一个数
title: 在一个有序的二维数组中查找一个数(num) (行:从左到右递增;列:从上到下递增) thought: 1、选取数组中右上角的数字temp: 若temp == num 查找过程结束 若temp > num 剔除temp所在的列(此列中temp下面的数字都大于temp) 若temp 2、每次比较都可以剔除一行或者一列 #inclu原创 2015-08-26 19:54:52 · 478 阅读 · 0 评论 -
5+从头到尾打印链表中的节点
struct linkNode { int m_value; linkNode *next; }; title: 一、从尾到头打印单链表list 二、对链表头部进行操作 thought: 一、 1、利用栈,从头开始依次将链表中的value压入栈, 然后再一次弹出栈顶元素,实现反向打印链表 2、利用递归,每次访问结点时,先递归输出它后面的结点原创 2015-08-26 20:11:02 · 766 阅读 · 0 评论 -
28+打印并统计字符串的全排列和组合
title: 一、输入一个字符串,打印出字符串中字符的所有排列 二、打印出字符串中字符的所有组合(如ab和ba是两种排列但是只能算一种组合) thought: 一: 1、将一个字符串分为两部分:第一部分为第一个字符,之后的子串属于第二部分; 2、将第一个字符依次与后面的字符交换; 3、每交换一次,对新串的第二部分子串进行递归的1、2操作; 4、操作完之后,要把交换的两个字符原创 2015-08-26 19:49:51 · 518 阅读 · 0 评论 -
4+替换字符串中的所有空格
title: 一、将字符串中的所有空格用%20替换 二、扩展:将两个有序的数组连接成一个有序数组,第一个数组足够大 thought: 1、原串的内存足够大,在原串中实现替换 2、可开辟新空间,将原串复制到新串的过程中把空格替换 realize: 一、 实现第一个想法: 1、统计原串s中(长度len)空格的个数cnt(cnt为0表示无空格) 2、则新串的长度(ne原创 2015-08-26 20:02:11 · 451 阅读 · 0 评论 -
6+重建二叉树
title: 输入二叉树的前序和中序的遍历结果,要求重建该二叉树 thought: 一般涉及到二叉树(左右子树)的操作,都会考虑用到递归方法; 1、创建一个新节点,由前序得到根节点,将其赋给新节点,再找到根节点在中序中的位置root_in,根据这一位置计算出左子树的长度len; 当数中只剩下一个节点时,就返回这一节点,此语句是递归结束语句;!! 2、根据左子树的长度计算出原创 2015-08-26 20:16:04 · 334 阅读 · 0 评论 -
9+实现斐波那契Fibonacci数列f(n),
title: 一、 实现斐波那契Fibonacci数列f(n), 即每一项是前两项的和:0,1,1,2,3,5,8.... 二、 由Fibonacci数列延伸, 可以处理青蛙跳(每次跳一步或者两步)问题 三、 矩形覆盖问题 (1X2矩阵可横放或竖放,则用此小矩阵覆盖nXm矩阵,有多少种覆盖策略) thought: 一、 方法一:典型的递归f(n)=f(原创 2015-08-26 20:37:25 · 1101 阅读 · 0 评论 -
10+统计整数的二进制中1的个数
title: 输入一个int型数据a,统计a的二进制中1的个数 thought: 利用“位运算”,与1进行“与运算&” 方法一:二进制数依次右移一位并与1做“与操作”“&”,统计操作结果为1的个数 (但是如果二进制是负数(右移前面补1),会造成死循环) 方法二:依次将1左移一位,与二进制数做“与操作”,统计结果等于1的个数 (时间复杂度0(n)n是二进制的原创 2015-08-26 20:41:34 · 503 阅读 · 0 评论