剑指offer
观赏
github:https://github.com/happyxiaotao
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
矩形覆盖问题
问题描述:我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?解析:当n = 1时,只有一种方法,竖着放。当n = 2时,有两种,横着放,或者竖着放,当n >= 3时,和斐波那契数列类似。先分为第一步是横着放还是竖着放,然后分别求出各自剩余的未覆盖矩形的覆盖方法。让最中结果相加。int RectCo原创 2017-03-04 17:00:38 · 1919 阅读 · 0 评论 -
二维数组中的查找
题目描述: 一个m*n的矩阵,从左到右从上到下都是递增的,给一个数x,判断x是否在矩阵中。要求效率尽可能的高。难点分析: 一遍情况下,我们在二维数组中查找某一个元素,都是将数组遍历一遍。此时时间复杂度为O(M+N) 但是,本题中的二维数组的情况比较特殊。从左到右递增,从上到下递增,而且要求效率尽可能高。提示可以利用此规律,进行较快的查找。思路: 根据题意,知道,二维矩阵中,某一行最大数在最左原创 2017-07-27 00:06:15 · 412 阅读 · 2 评论 -
17_7_22 一个数组中有一个数字的次数超过了数组的一半,求出这个字符。
题目描述: 一个数组中有一个数字的次数超过了数组的一半,求出这个字符。如:int a[]={2,3,2,2,2,2,2,5,4,1,2,3},求出超过一半的数字是2。难点分析: 如果,通过O(N)的时间复杂度,通过两层循环,求出每个字符出现次数。发现有大于数组个数一半的,那么就可以得到该字符。 但是,面试官是不希望看到这个答案的。那么就需要一些比较巧妙的办法了。思路: 思路: 如果,某个字原创 2017-07-22 23:38:15 · 395 阅读 · 0 评论 -
17_7_22 求二叉树叶子节点的个数/求二叉树第k层的节点个数
题目描述: 求二叉树叶子节点的个数/求二叉树第k层的节点个数思路: 这两个题目的思想类似,都是利用二叉树的自相似性,把每次传进来的节点看做是一个二叉树的根结点。将问题细化,将每个节点的状态信息返回即可。节点以及二叉树信息:template <typename T>struct BinaryTreeNode{ BinaryTreeNode(const T& data)原创 2017-07-22 22:26:44 · 853 阅读 · 0 评论 -
17_7_18:两个栈实现一个队列。两个队列实现一个栈
题目: 1,使用两个栈实现一个队列 2,使用两个队列实现一个栈 1,使用两个栈实现一个队列思路: 根据栈的FILO性质,将数据,全部存入第一个栈中; 再将第一个栈中数据全部放入第二个栈中; 这样,将数据从第二个栈中取出时,达到了FIFO效果。template <typename T>class MyQueue{public: MyQueue() {} void原创 2017-07-18 20:01:43 · 257 阅读 · 0 评论 -
青蛙变态跳台阶
其实和青蛙跳台阶类似的思想。n = 0, 0-> f(0)n = 1, (1)-> f(1) n = 2, (2, 1+1) ->f(0)+f(1) n = 3, (3, 2+1, 1+2)-> f(0)+f(1)+f(2)n = 4, (4, 3+1, 2+2, 1+3)-> f(0)+f(1)+f(2)+f(3)n = n, (n,n-1+1, n-2+2, ...原创 2017-02-28 22:41:12 · 521 阅读 · 0 评论 -
斐波那契数列
问题描述:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(n首先知道斐波那契数列的简介:斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数原创 2017-02-28 21:35:20 · 387 阅读 · 0 评论 -
青蛙跳台阶
题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法?因为一次只能跳一个或两个台阶。所以,n n = 1,只能跳一个台阶。f(1) = 1;n = 2, 两次跳一个台阶,或一次跳两个台阶。f(2) = 2; n = 3, 只能从第2个台阶或第一个台阶跳上来。判断f(2)和f(1)即可获得f(3)。f(3) = f(2)+f(1)原创 2017-02-28 19:31:32 · 338 阅读 · 0 评论 -
替换空格
功能:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路:从后往前替换/*功能:用%20替换空格*/#include #include #include void replaceSpace(char* pstr){ int i = 0; int count =原创 2017-02-27 15:51:17 · 305 阅读 · 0 评论 -
数值的整数次方
问题描述:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。解析:主要考察对于base在double类型下与0的判断,exponent的正负情况。double Power(double base, int exponent) { if ((1E-16 >= base) && (-1E-16 <= base)) return原创 2017-03-04 17:32:51 · 314 阅读 · 0 评论 -
二进制中1的个数
问题描述:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。解析:对于整数在计算机中的存储不太了解的可以查看我的博客:http://blog.youkuaiyun.com/qq_35524916/article/details/52727080利用 n&(n-1)可以将n中二进制表示的最左边的1变为0。可以通过计算将1变为0个次数,统计1的个数。int numberOf1(int原创 2017-03-04 17:24:04 · 265 阅读 · 0 评论 -
判断一颗二叉树是是否是另一颗树的子树。
题目描述:.判断一颗二叉树是是否是另一颗树的子树。比如tree2是tree1的子树。 **难点分析: 要判断树2是否是树1中的节点,就需要遍历树1中节点与树2根结点比较。如果相同,则树1,树2同时遍历比较。两棵树进行两层遍历,对于技巧要求较高。思路: 将过程分为两步: 1,通过递归,在树1中每次给出一个节点。 2,通过递归,在树2中判断该结点所在树是否与树2一样。实现代码://节点信息:s原创 2017-07-29 00:06:50 · 805 阅读 · 1 评论
分享