![](https://img-blog.csdnimg.cn/20190710150701175.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
剑指offer 题目分析及代码讲解
本专栏是剑指offer一书的学习资料,其中包含每个题目的讲解以及c++代码实现,欢迎学习交流
starflyyy
这个作者很懒,什么都没留下…
展开
-
剑指offer:正则表达式匹配
剑指offer:正则表达式匹配 题目: 实现一个函数用来匹配包含' , ' 、' * ' 的正则表达式。 模式中的' . '表示任意一个字符,而' * '表示它前面的字符可以出现任意次(含0次) 在本题中,匹配指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式 "a.a" 和"ab*ac*a"匹配,但和"aa.a"和"ab*a不相配"。 思路: 可以使用递归解决。 将正则...原创 2019-07-18 22:41:50 · 137 阅读 · 0 评论 -
剑指offer:删除链表中重复的节点
剑指offer:删除链表中重复的节点 参考博客删除链表中重复的节点 题目: 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5。 思路: 首先检查边界条件(链表有0个节点或链表有1个节点),返回头节点。 其次为了避免由...转载 2019-07-16 22:36:47 · 174 阅读 · 0 评论 -
剑指offer: 打印从1到最大的n位数
剑指offer: 打印从1到最大的n位数 题目: 输入数字n,按顺序打印从1到最大的n位十进制数。比如输入3,则打印出1、 2 、3 直到999。 思路: 1.利用字符串模拟数字的加法。 2.采用全排列的思路,并使用递归实现全排列。 实现: 思路1: class Solution{ public: void Print1ToMax(const int n){ ...原创 2019-07-14 16:35:00 · 131 阅读 · 0 评论 -
剑指offer:数值的整数次方
剑指offer:数值的整数次方 题目: 实现函数 double Power(double base, int exponent),求base的exponent次方。 不使用库函数,不需要考虑大数问题。 思路: 简单的一次次相乘,效率太低,可以采用二分的想法。对于一个exponent,可以分解成 2的幂次相加的形式。这种分解恰好对应了这个exponent的二进制形式。如图: 如exp...原创 2019-07-13 11:06:58 · 94 阅读 · 0 评论 -
剑指offer:二进制中1的数目
剑指offer:二进制中1的个数 题目: 实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如,把9表示成二进制是1001,有两位是1,输出2. 补充知识: 左移运算符: m << n 表示把m左移n位。左移n位的时候,最左边的n位将被丢弃,同时在最右边补上n个0. 右移运算符: m >> n 表示把m右移n位。右移n位的时候,最右边的n位将被丢弃...原创 2019-07-12 11:12:25 · 85 阅读 · 0 评论 -
剑指offer:剪绳子
剑指offer:剪绳子 题目: 有一根长度为n的绳子,请把绳子剪成m段(m,n都是整数,n>1且m>1),每段绳子的长度记为k[0],k[1],...k[m-1].请问k[0]×k[1]×...×k[m-1]的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2,3,3的三段,此时得到的最大乘积是18. 思路: 1.动态规划:O(n^2)的时间复杂度和O(n)的空...原创 2019-07-11 11:33:57 · 127 阅读 · 0 评论 -
剑指offer:矩阵中的路径、机器人的运动范围
剑指offer:矩阵中的路径、机器人的运动范围 题目: 矩阵中的路径: 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符路径。路径可以从矩阵的任一格开始,每一步可以在矩阵中向左右上下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。 思路: 深度优先搜索。 实现: class Solution { public: bool hasP...原创 2019-07-10 11:34:58 · 122 阅读 · 0 评论 -
剑指offer:旋转数组的最小数字
剑指offer:旋转数组的最小数字 题目: 将一个数组最开始的若干个元素搬到数组的末尾,我们称为数组的旋转。输入 一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组{3,4,5,1,2} 为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 思路: 1.最简单的是将数组循环一遍,这是O(n)的解法,不过没有用到旋转数组的特性,肯定不满足要求。 2.注意到旋转后的数组...原创 2019-07-09 10:44:59 · 85 阅读 · 0 评论 -
剑指offer:Fibonacci 数列
剑指offer:Fibonacci数列 Fibonacci 数列由下式定义: 思路: 1.直接将上式转化为代码,使用递归的方式。缺点:效率太低,容易造成栈溢出。(可以看到有很多重复计算的) 2.使用循环自下而上计算,时间复杂度是O(n). 3.使用公式,这个方法的时间复杂度是O(logn),因为乘方运算可以使用递归每次算其的指数的一半。 实现: 方法2: cla...原创 2019-07-07 11:36:21 · 137 阅读 · 0 评论 -
剑指offer: 用两个栈实现队列
剑指offer:用两个栈实现队列 我们知道栈是先进后出,而队列是先进先出, 所以想法也十分简单,使用两个栈,我们把第一个栈的元素"倒进"第二个栈就可以了。 中间的疑问是,如果一边push,一边pop,会不会出问题。具体看图: 将 stack1 中的元素倒入 stack2中。 这时直接将 stack2中的元素输出,即可实现先进的元素先出。 如果push( ), pop( )...原创 2019-07-06 10:27:55 · 89 阅读 · 0 评论 -
剑指offer: 二叉树的下一个节点
剑指offer:二叉树的下一个节点 题目:给定一颗二叉树和其中的一个节点,找出中序遍历序列的下一个节点。 树中的节点除了有两个分别指向左右子节点的指针,还有一个指向父节点的指针。 中序遍历是按照左根右的顺序进行遍历的: 若当前节点有右子树,那么它的有子树里面最左的第一个为下一个节点 若当前节点没有右子树,则需要向parent回溯: 若当前节点为其父节点的左节点,则它的下一个节点为...原创 2019-07-05 20:31:48 · 114 阅读 · 0 评论 -
剑指offer:重建二叉树
剑指offer:重建二叉树 题目:输入某二叉树的前序遍历和中序遍历的结果,重建该二叉树。 设输入的前序遍历和中序遍历的结果中都不含重复的数字。 例如:输入的先序遍历序列{1, 2, 4, 7, 3, 5, 6, 8}和中序遍历序列{4, 7, 2, 1, 5, 3, 8, 6}, 则重建该二叉树并输出头结点。 使用 pre 表示先序遍历序列,使用vin表示中序遍历序列。 思路:前序...原创 2019-07-05 17:05:23 · 101 阅读 · 0 评论 -
剑指offer:反向输出链表
剑指offer:反向输出链表 思路:使用stack先进后出,恰好与题目要求反向输出相契合。 实现: 牛客网编程通过。 class Solution { public: vector<int> printListFromTailToHead(ListNode* head) { vector<int> values; stack...原创 2019-07-04 11:26:36 · 164 阅读 · 0 评论 -
剑指offer:替换空格
剑指offer:替换空格 问题: 实现一个函数,将字符串中的每个空格替换成"%20""。 如:输入“We are happy.”, 则输出 "We%20are%20happy" 首先有两种方式:一是在原来的字符串上面进行替换,就有可能覆盖子啊该字符串后面的内存。 另一种是创建新的字符串进行替换,那么可以分配足够多的内存。 现在主要考虑第一种方式。 思路: 1.从前...原创 2019-07-02 17:12:49 · 83 阅读 · 0 评论 -
剑指offer:二维数组的查找
剑指offer:二维数组的查找 问题:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照 从上到下的顺序排序。请完成一个函数,输入这样的一个二维数组和整数,判断数组中 是否有该整数。 思路: 1.首先可以判断该问题最差的算法是O(n^2),所以比这个方法更差的方法就不用考虑了。 2.其次可以想到可以用到 广度优先搜索(BFS) 算法。 3.最后是书上提供的思路,让人拍案叫绝: 右上...原创 2019-06-30 17:14:41 · 155 阅读 · 0 评论 -
剑指offer:数组中重复数字
剑指offer:数组中重复的数字 题目:一个长度为n的数组里的所有数字都在0~n-1的范围内。数组中某些 数字时重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。 请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2,3,1,0,2,5,3}, 那么对应输出的重复的数字是2或3。 思路: 1.先将数组进行排序,然后从排序的数组中找出重复的数字。排序:O(nlogn) 2.h...原创 2019-06-29 19:40:49 · 237 阅读 · 0 评论