![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer面试题
菜菜也逆袭
这个作者很懒,什么都没留下…
展开
-
剑指offer--反转单词顺序列
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么? 思路:要翻转单词顺序列,首先我们...原创 2018-08-14 17:22:45 · 222 阅读 · 0 评论 -
剑指offer--二叉树的镜像
操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 ...原创 2018-08-17 14:39:29 · 152 阅读 · 0 评论 -
剑指offer--平衡二叉树
输入一棵二叉树,判断该二叉树是否是平衡二叉树。 思路:首先什么是平衡二叉树,左子树和右子树深度之差小于等于1,则为平衡而叉树,为什么是<=1因为有奇数个节点,和有偶数个节点不一样。我们从根开始不断的访问他的左右子树,不断的求左右子树的深度,如果深度之差<=1则是平衡二叉树返回真,否则为假。class Solution {public: int TreeDepth(Tre...原创 2018-08-27 14:47:59 · 126 阅读 · 0 评论 -
剑指offer--丑数
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。 思路:一般人往往都会想到一种很暴力的方法,从最小的丑数开始逐一递增,判断每个数是不是丑数,从而求处第n个丑数。可是这个方法虽然很容易实现,可以试过就知道。因为时间复杂度,和空间复杂度限制,通过率 0.00% 那么...原创 2018-08-23 14:13:57 · 141 阅读 · 0 评论 -
剑指offer--左旋转字符串
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!class Solution {public: string LeftRotateStrin...原创 2018-08-28 14:25:49 · 106 阅读 · 0 评论 -
剑指offer--第一个只出现一次的字符位置
在一个字符串(0&lt;=字符串长度&lt;=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写). 思路:想要提高时间复杂度,节约时间,那就只能空间换时间。一个空间换时间很有效果的数据结构是哈希表,哈希表使用时要求,首先使得数据范围,这里它说是字符串,字符就只有256中,那一个256大小的数组就可以存储,当然还可以用位图。我们先遍历...原创 2018-08-24 14:58:18 · 150 阅读 · 1 评论 -
剑指offer--二叉树的深度
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 思路:面对树形结构,我们常用的算法就是递归,根树的每一块子树都可以看成一棵小的完整的树,这位我们解题提供了很好的思路。如果一开始传入的就是空的那么深度就是0,如果不是0,那么这颗树的深度就是 “1+左右子树中深的那根字数的深度”。记住+1哦。因为无论左右子树的深度是多少,加上...原创 2018-08-25 23:18:08 · 112 阅读 · 0 评论 -
剑指offer--求1+2+3+···+n
求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 思路:如果一个用while循环很简单的逻辑却不让用循环完成,思考一下用递归代替。同理很多递归的题,也可以用栈模拟,或者while循环就完成啦。class Solution {public: int Sum_Solution(int n) { ...原创 2018-09-03 10:26:08 · 156 阅读 · 0 评论 -
剑指offer--翻转单词顺序列
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student.a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?思路:我们采取先把单词整个反转,也...原创 2018-10-08 19:08:45 · 180 阅读 · 0 评论 -
剑指offer--机器人的运动范围
地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?思路:首先我们要设定一个函数,来确定这个格子是否可以...原创 2018-10-08 19:18:43 · 115 阅读 · 0 评论 -
剑指offer--整数中1出现的次数(从1到n整数中1出现的次数)
题目求出1-13的整数中1出现的次数,并算出100-1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。class Solution {public: int Number...原创 2018-11-23 20:16:08 · 717 阅读 · 0 评论 -
剑指offer-两个链表的第一个公共结点
题目输入两个链表,找出它们的第一个公共结点。/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: &nbs...原创 2018-11-23 20:19:21 · 718 阅读 · 0 评论 -
剑指offer--树的子结构
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 思想: 我是用递归的方法来完成树的子结构的匹配的。如果这棵树,因为题目里规定空树是不匹配的,那么我的递归出口自然就不能是该节点为空,匹配成功。因为 节点为空,是匹配失败的退出条件啊。那么我们可以设定该节点值相同,且该节点既没有左子树,又没有右子树。那么不就匹配成功了吗!那如果该节点匹配成功了,但是有左右...原创 2018-08-16 18:48:02 · 102 阅读 · 0 评论 -
剑指offer--复杂链表的复制
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) 思想:因为这个链表是复杂链表,及有一个指针指向任意一个节点。所以不可能,遍历复制。所以有了这么一个想法。遍历一遍把每个节点单独值拷贝,然后把这个拷贝出来的新节点,直接插到被拷贝的节点...原创 2018-08-16 18:40:46 · 97 阅读 · 0 评论 -
剑指offer--合并两个排序的链表
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。思路:我这里用的是插入合并的方法。先比较phead1和phead2第一个的大小,小的作为目标链表,大的作为源也就是把dest链表作为基本链表,用src链表去比较,如果比phead1的cur小,前插,插入到phead1中。也就是一个目标,一个源。把源插入进去,如果源先到头,不用操作,目标的尾next指向源...原创 2018-08-13 17:42:49 · 119 阅读 · 0 评论 -
剑指offer--反转链表
输入一个链表,反转链表后,输出新链表的表头。思想:如果要使得链表反转,就要next的next 指向它,但是这样next -&amp;amp;gt;next就会丢失成为野指针,所有要先那一个变量把它存起来,然后在后移,改变下一个的指针,最后 ,phead 的next 设置为空,在最后的结构体指针赋值给phead返回回去。/*struct ListNode { int val; struct...原创 2018-08-13 17:36:02 · 320 阅读 · 0 评论 -
剑指offer--链表中倒数第k个节点
输入一个链表,输出该链表中倒数第k个结点。 思路:一个很简单的方法做这道题,要求倒数第k个节点,只有求出一共有多少个节点,就知道是正着数第一个节点了,递归或者for循环,就很容易完成了。/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), n...原创 2018-08-08 07:42:13 · 96 阅读 · 0 评论 -
剑指offer--数值的整数次方
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。思路:一个数值的整数次方,可以分为正整数次方,负整数次方,这里是浮点型,所有我们记录最后结果也要用浮点类型的变量接收。如果是正整数次方那就很容易了,循环 × exponent次就好了。但是如果是负整数,就要从一开始,除 ÷ exponent次了。class Soluti...原创 2018-08-08 07:36:17 · 103 阅读 · 0 评论 -
剑指offer--二进制的1的个数
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 思路:要求出二进制的位有位操作符 &amp;amp;amp;与 ,| 或 , ^异或,~取反等,按位取出,不断左移,最低位加到计数器上,则完成结果。class Solution {public: int NumberOf1(int n) { int count = 0; for(int i =...原创 2018-08-06 10:11:02 · 108 阅读 · 0 评论 -
剑指offer--矩形覆盖
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 思路: 我们只前已经完成了拆分大化小的题,青蛙跳台阶问题【剑指offer面试题】跳台阶2*n大小的格子可以由 由2*n-1,大小的格子最后竖着放一块2*1的个格子组成 也或者是有2*n-2大小的格子,由两块1*2的格子横着并排组成。也就是说想知道2*n个格子有...原创 2018-08-06 10:00:02 · 101 阅读 · 0 评论 -
【剑指offer面试题】跳台阶升级版,变态跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 思路:我们已经完成了青蛙一次只能跳上1,2层台阶的面试题,见【剑指offer面试题】青蛙跳台阶 那么它的升级版,变态跳台阶又怎么办呢。 我们先梳理几个底层有多少种跳法: 1层台阶, 1 1种 2层台阶,11,2 2种 3层台阶,111,12,21,3 4种 ...原创 2018-08-06 08:59:44 · 1012 阅读 · 0 评论 -
剑指offer--跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。思想: 我在写斐波那契数列面试题时就用过这种思想,大的事情都是有小的事情组合而成的,我们可以拆分。青蛙可以跳上一层台阶,也可以跳上两层台阶,那么如果要跳到100,则只可能是从99层跳上来,和98层跳上来这两种情况。那么只有我算出来跳到99有多少种跳法,98层,依次推理到最低层...原创 2018-08-04 13:27:40 · 205 阅读 · 0 评论 -
【剑指offer面试题】--斐波那契数列
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 n&lt;=39首先介绍一下什么是斐波那契数列:斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13...原创 2018-08-04 13:18:36 · 205 阅读 · 0 评论 -
【剑指offer面试题】--替换空格
请实现一个函数,将一个字符串中的每个空格替换成“%20”。 例如,当字符串为We Are Happy. 则经过替换之后的字符串为We%20Are%20Happy。 面试题中所给的函数头是: void replaceSpace(char *str,int length) char* str 则是题目所给的字符串,而长度呢,应该就是可以存储的最大长度。如果是字符串常量那就没办法扩容...原创 2018-08-04 13:11:09 · 228 阅读 · 0 评论 -
剑指offer--删除链表中的重复节点
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1-&amp;amp;gt;2-&amp;amp;gt;3-&amp;amp;gt;3-&amp;amp;gt;4-&amp;amp;gt;4-&amp;amp;gt;5 处理后为 1-&amp;amp;gt;2-&amp;amp;gt;5 思想:首先这是一个排序的链表 ,原创 2018-08-14 17:46:26 · 101 阅读 · 0 评论 -
剑指offer--矩阵中的路径
题目请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e 这样的3 X 4 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含...原创 2018-11-23 20:33:37 · 693 阅读 · 0 评论