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