![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer
菜鸡一号
身边满是大佬的菜鸡
展开
-
把二叉树打印成多行
题目描述从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。解法一: 这个题和之字形打印很像,这里我们直接使用两个双端队列就好了deq_1, deq_2。 思路如下根节点指针放入 que_1,根据 que_1中的元素,可以得到其对应的左右孩子,也就是下一行数据,存放入 que_2仿照第一步, que_2中的元素的左右孩子,用 que_1来存放交替执行第一、二步,直到...原创 2018-12-03 11:24:24 · 108 阅读 · 0 评论 -
矩阵中的路径
题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。例如 a b c e s f c s a d e e 这样的3 X 4 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字...原创 2018-12-05 19:16:41 · 132 阅读 · 0 评论 -
滑动窗口的最大值
题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5};针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1},{2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5...原创 2018-12-05 19:27:51 · 89 阅读 · 0 评论 -
二叉搜索树的第k个节点
题目描述给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8)中,按结点数值大小顺序第三小结点的值为4。 二叉搜索树的中序遍历即是有序的,按从小到大的顺序排列的。解法一: 可以选择全部遍历二叉树,把结果存下来,再找出第K个节点。当然,这是比较简单但是会做很多无用功。那有没有一种方法,可以直接一步到位那? 关于这种解法,记得排除特殊情况(1)pRoot =...原创 2018-12-10 22:39:14 · 90 阅读 · 0 评论 -
旋转数组的最小数字
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 对于这类题目,使用遍历绝对是可以做出来的。但是效果绝对不会太好。 接下来会试着缩小范围,比如使用二分查找...原创 2019-01-02 11:29:35 · 99 阅读 · 0 评论 -
斐波那契数列
题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39解法一:使用递归回溯解法 网上的资料很多,不多解释,代码如下:但是这种方法的时间与空间复杂度肯定很高,重复计算太多。class Solution {public: int Fibonacci(int n) { if (n == 0)...原创 2019-01-02 20:10:08 · 187 阅读 · 0 评论 -
跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。思路: 最开始想的是从下往上跳,一直跳到第 n 阶。这样可以先举例试试,然后总结归纳规律,其实是斐波那契数列。 接下来我们反着跳,从第 n 阶往下跳,那么总共的跳法就是第一次跳 1 阶的解法数S(n-1)加上第一次跳 2 阶的解法数S(n-2)之和。(感觉反着跳...原创 2019-01-02 22:35:06 · 98 阅读 · 0 评论 -
变态跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。解法一:举例总结规律解法二:数学逻辑(1) S(n)=S(n-1)+S(n-2)+…+S(0);(2) S(n-1)=S(n-2)+S(n-3)+…+S(0);(1) + (2) ==>S(n)=2*S(n-1);数学逻辑证明规律的存在,接下来就看代码,可以...原创 2019-01-03 13:43:57 · 84 阅读 · 0 评论 -
矩形覆盖
题目描述我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?思路: 对于一个2*n的大矩形,我们可以采取横着或者竖着去覆盖更大的矩形。所以对于最底层,我们可以选择使用横着覆盖,或者两个竖着来覆盖。即S(n)=S(n-1)+S(n-2),这很明显了,是个斐波那契数列。代码如下:class Solution {p...原创 2019-01-03 14:17:39 · 174 阅读 · 0 评论 -
二进制中1的个数
题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。思路一: 数字在计算机中的存储形式本来就是二进制的,那么我们(1)可以通过 & 操作来获取数字最后一位的值(2)然后通过移位 >> 操作来使该数字右移(3)重复一二步的操作,直到最终数字为0当然在这里我们也可以选择 1 左移,然后 & 来取得每一位的值,这样反而不容易出错。代码如...原创 2019-01-03 14:55:58 · 113 阅读 · 0 评论 -
数值的整数次方
题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。思路: base:+ - 0;exponent : + - 0; base的正负号影响并不大,倒是等于0会产生较大的影响,就是对0exponent的讨论,这里不作讨论,大家应该都明白。 假设base不为0,接下来就是对exponent的分别讨论了。1。 最终结果也...原创 2019-01-05 19:32:19 · 182 阅读 · 5 评论 -
机器人的运动范围
题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8> = 19。请问该机器人能够达到多少个格子?解法一: 很像八皇后问题,通过...原创 2018-12-04 16:20:40 · 306 阅读 · 0 评论 -
不用加减乘除做加法
题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。解法一: 对于这个题我先说一下我自己的思路吧。看到题目,我脑袋里的第一个想法就是用异或(^),类似于全加器(计算机组成原理或者数电中的知识吧,忘了) 首先利用(num & 1)分别获取两个整数当前位的值,tmp1 = num1 & 1;tmp2 ...原创 2018-11-22 17:27:37 · 82 阅读 · 0 评论 -
按之字形顺序打印二叉树
题目描述请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。解法一: 使用两个双端队列,一个当队列用(从左到右打印),一个当栈用(从右到左打印)。 大致思路如下:定义两个双端队列的数据结构 deq_1, deq_2,相互初始化。deq_1 中的元素的左右子树,按顺序进入 deq_2,然后 ...原创 2018-12-03 10:07:33 · 120 阅读 · 0 评论 -
删除链表中重复的节点
题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。例如,链表1-&gt;2-&gt;3-&gt;3-&gt;4-&gt;4-&gt;5 处理后为 1-&gt;2-&gt;5解法一: 因为删除重复的结点是一种重复的操作,所以可以单独写个函数来实现它。(本来我想直接一个函数搞定的,但是思路有点乱,代码也很乱)原创 2018-12-02 21:52:57 · 87 阅读 · 0 评论 -
链表中环的入口节点
题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。 基础假设:找出环的入口节点后,链表不变。(自己假设的,你也可以有自己的假设) 解释一下吧。我想过修改 val 的值作为一个标记,可那样链表的存在就没什么意义了;或者采用全断链的方式做,内存泄漏;如果你全释放了,入口节点那?解法一: 使用map<ListNode*, int>数据结构来记录,...原创 2018-12-01 22:30:28 · 96 阅读 · 0 评论 -
表示数值的字符串
题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。解法一:找到字符’e’ 或者 ‘E’,把字符串分为两段,分别判断字符左边:满足要求(1)小数点只能出现一次 (2)加减号只能原创 2018-11-30 21:17:53 · 85 阅读 · 0 评论 -
正则表达式
题目描述请实现一个函数用来匹配包括’.‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(包含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配解法一:这里主原创 2018-11-30 19:49:35 · 86 阅读 · 0 评论 -
构建乘积数组
题目描述给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1]。不能使用除法。解法一:最开始我想用移位来做的,举个栗子, (num * 5 = num >> 2 + num >> 1),这种明显是可行的,然后我就想通过一些基础运算,把移位也应用到这里,发现还...原创 2018-11-29 09:53:27 · 78 阅读 · 1 评论 -
数组中重复的数字
题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。解法一:数字计数,类似于word count,想到了使用关联容器map来做(map底层是用红黑树实现的)。具体思路如下:...原创 2018-11-28 16:17:48 · 86 阅读 · 0 评论 -
和为S的连续正数序列
题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!输出描述:输出所有和为S的连续正...原创 2018-11-13 22:25:23 · 66 阅读 · 0 评论 -
翻转单词顺序列
题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?看到这种题,想法...原创 2018-11-15 17:17:57 · 81 阅读 · 0 评论 -
扑克牌顺子
题目描述LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子.....LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,...原创 2018-11-18 21:17:24 · 121 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面
题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。思路: 出于不同的考虑,会有不同的解法。(1)仿写牛客https://www.nowcoder.com/questionTerminal/beb5aa231adc45b2a5dcc5b62c93f593要想保...原创 2019-01-05 21:32:54 · 135 阅读 · 0 评论