01.《剑指Offer》
X东方晓X
这个作者很懒,什么都没留下…
展开
-
《剑指Offer》阅读后记
终于翻过最后一页终于做完最后一题心情愉悦有丝丝淡淡的欣喜从开始到现在不是完结而是另一次开始继续加油,大叔!接下来的计划:在这里(CSDN博客)把在牛客网做过的题目以读书笔记的方式重新整理一下,以巩固《剑指Offer》学到的知识。原创 2015-11-26 15:53:22 · 417 阅读 · 0 评论 -
《剑指Offer》读书笔记07:斐波那契数列
题目描述 斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21 特别指出:第0项是0,第1项是第一个1。 这个数列从第2项开始,每一项都等于前两项之和。 现在要求输入一个整数n,请你输出斐波那契数列的第n项。 参考百度百科 斐波那契数列解题思路利用斐波那契数列的递推公式F(n)=F(n-1)+F(n-2). 写出的代码简洁易懂,但时间原创 2015-11-27 17:21:06 · 505 阅读 · 0 评论 -
《剑指Offer》读书笔记06:旋转数组的最小数字
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减序列的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。解题思路简单直接粗暴方法:从头至尾遍历数组,找出最小元素,时间复杂度O(n).排序数组中可以用二分查找法(时间复杂度O(log n)),此旋转数组基本有序。用原创 2015-11-27 16:33:46 · 402 阅读 · 0 评论 -
《剑指Offer》读书笔记10:矩形覆盖
题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。 请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?解题思路如图: 求F(5)。 1. 若左边4列已经覆盖F(4),那么F(5)在右边只能覆盖一竖着的小矩形。方法种数F(4)*1=F(4); 2. 若左边3列已经覆盖F(3),那么F(5)在右边只能覆盖两横着的小矩形。方法种数F(3)*1=F(3原创 2015-11-28 12:31:02 · 359 阅读 · 0 评论 -
《剑指Offer》读书笔记09:变态青蛙跳
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。 求该青蛙跳上一个n级的台阶总共有多少种跳法。解题思路因为青蛙一次可以跳1,2,3…n级台阶。 1. 求F(1), 青蛙跳一次1级台阶, F(1) = 1 = 21−1^{1-1}}; 2. 求F(2), 青蛙在1级台阶{即F(1)},从1级台阶直接跳到2级台阶,跳法种类F(1); 青蛙直接从最下面跳原创 2015-11-28 10:09:16 · 446 阅读 · 0 评论 -
《剑指Offer》读书笔记08:跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级。 求该青蛙跳上一个n级的台阶总共有多少种跳法。解题思路如图,假如青蛙要跳上第5个台阶,n=5,即求F(5)。 因为青蛙一次可以跳1级,也可以跳2级。 1. 青蛙最后一跳是跳1级,那么青蛙之前在第4个台阶。 青蛙到达第3个台阶时的跳法种类是F(4),从第4个台阶跳1级到第5个台阶是确定的,并不会增加跳法种类。 所以青蛙最后一跳原创 2015-11-28 09:36:42 · 558 阅读 · 0 评论 -
《剑指Offer》读书笔记05:用两个栈实现队列
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解题思路队列的特点先进先出,栈的特点后进先出。假如序列a,b,c压入栈stack1,在stack1中出栈,以顺序c,b,a压入stack2,那么stack2出栈时,顺序变为a,b,c,基本满足队列要求。在步骤2中,假如stack2中的a,b出栈,留下c,此时在stack1中压入d,e。此原创 2015-11-27 15:04:16 · 374 阅读 · 0 评论 -
《剑指Offer》读书笔记04:重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。 假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解题思路由前序遍历序列确定根节点 由前序遍历序列{1,2,4,7,3,5,6,8}知根节点数值为1在中序遍历序列中找到该根节点原创 2015-11-27 12:10:49 · 343 阅读 · 0 评论 -
《剑指Offer》读书笔记03:从尾到头打印链表
《剑指Offer》读书笔记03:从尾到头打印链表题目描述 输入一个链表,从尾到头打印链表每个节点的值。解题思路思路1(参考《剑指Offer》): 因为遍历链表时顺序为从头到尾,而题目要求从尾到头打印。自然想到栈(Stack)这种数据结构来实现。在从头到尾遍历时,把每个结点的值存至栈,然后从栈顶一个一个打印。思路2(参考《剑指Offer》): 因为递归在本质上是一个栈结构,所以同样可以用原创 2015-11-27 11:41:14 · 620 阅读 · 0 评论 -
《剑指Offer》读书笔记02:替换空格
《剑指Offer》读书笔记02:替换空格题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.,则经过替换之后的字符串为We%20Are%20Happy.。解题思路1.常规思维: - 用一个指针从第一个字符往后移,遇到空格则先把空格后面的所有字符往后移动两格,然后把空格替换成%20。 - 每次需移动后面O(n)个字符,假如有O(n)个空格原创 2015-11-27 10:45:35 · 434 阅读 · 0 评论 -
《剑指Offer》读书笔记01:二维数组中的查找
《剑指Offer》读书笔记01:二维数组中的查找题目描述在一个二维数组中, 每一行都按照从左到右递增的顺序排序, 每一列都按照从上到下递增的顺序排序。 请完成一个函数, 输入这样的一个二维数组和一个整数, 判断数组中是否含有该整数。解题思路1.按照题目描述构建一个符合题意的数组(m*n)如int Input[6][7] = { {11, 12, 13, 14, 15, 16, 17原创 2015-11-26 16:42:46 · 411 阅读 · 0 评论 -
《剑指Offer》读书笔记11:二进制中1的个数
题目描述 输入一个整数,输出该数二进制表示中1的个数。 其中负数用补码表示。解题思路 思路一:处理该整数。 判断整数二进制表示的最右边一位是不是1,即将该整数与1(筛选因子)相与,然后右移一位。int count = 0;while ( n ) { if ( n & 1 ) { count++; } n = n >> 1;}return c原创 2015-11-30 10:05:03 · 448 阅读 · 0 评论