![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer
文章平均质量分 50
假老练啊哦
男性最大的魅力是幽默
展开
-
剑指offer题目
1、二维数组中的查找在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。2、替换空格请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。3...原创 2019-09-18 08:32:01 · 387 阅读 · 0 评论 -
队列的最大值
请定义一个队列并实现函数max得到队列里的最大值,要求函数max、push_back和pop_back的时间复杂度都是O(1)总结:1.最大队列和最大栈的题目,区别在哪?队列是先进先出,尾部进首部出去;但是栈是尾部进去,尾部出来。所以这两题其实不太相同,不过核心思想就是要用一份辅助栈。2.队列的最大值,一个用queue一个用deque,因为辅助最大队列中保存当前队列的最大值,它可能会把...原创 2019-08-10 17:35:59 · 158 阅读 · 0 评论 -
n个骰子的点数
把n个骰子扔在地上,所有骰子朝上一面的点数之和为s,输入n,打印出s的所有可能出现的值出现的概率。思路:一个骰子扔出来的点数为{1,2,3,4,5,6}。n个骰子扔出来为s,和n-1个骰子扔出来的点数密切相关。因为只要n-1个骰子扔出来了s-1,s-2,...,s-6,最后一个骰子随便扔出几都可以凑成s。所以用一个二维的dp数组来保存扔出来骰子的点数次数。本来准备开辟n+1行,s+1列的数...原创 2019-08-10 16:00:18 · 132 阅读 · 1 评论 -
不重复字符的最长子串
leetcode:3. 无重复字符的最长子串给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出...原创 2019-08-06 09:10:10 · 116 阅读 · 0 评论 -
礼物的最大价值
题目描述在一个m×n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格直到到达棋盘的右下角。给定一个棋盘及其上面的礼物,请计算你最多能拿到多少价值的礼物?leetcode类似题目:62. 不同路径63. 不同路径 II思考:如果要是拿到最大价值的路径和最大价值,是不是就只能用回溯法了?...原创 2019-08-05 16:12:54 · 97 阅读 · 0 评论 -
把数字翻译成字符串
leetcode :91. 解码方法给定一个数字,按照如下规则翻译成字符串:0翻译成“a”,1翻译成“b”…25翻译成“z”。一个数字有多种翻译可能,例如12258一共有5种,分别是bccfi,bwfi,bczi,mcfi,mzi。实现一个函数,用来计算一个数字有多少种不同的翻译方法。自上而下,从最大的问题开始,递归 : 12258...原创 2019-08-05 11:40:35 · 203 阅读 · 0 评论 -
剪绳子
问题描述:给你一根长度为n的绳子,请把绳子剪成m段(m和n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],...,k[m].请问k[0]*k[1]*...*k[m]可能的最大乘积是多少?总结:动态规划,dp[i]表示长度为i的绳子,剪成若干段之后的最大值。时间复杂度O(n²),空间复杂度O(n)i表示当前绳子的长度,j表示分割点,至少是为1,分割...原创 2019-07-05 15:07:22 · 223 阅读 · 0 评论 -
c++单列模式
借鉴了剑指offer书上写的和一个博客:C++单例模式。自己做一个简单的总结。什么是单列模式?只能有一个实例化的对象的类。那么如何做到只有一个实例化对象呢?构造函数一般定义在public之中,你也可以定义在protected和private之中,这样的话就没有办法进行外部实例化。有的时候, 会要求禁止用户创建类的实例就会这么用的。构造函数不能从外部调用 ---> 构造函...原创 2019-06-30 11:13:25 · 944 阅读 · 1 评论 -
c++赋值运算符函数、拷贝构造函数、移动构造函数
赋值运算符函数在写的时候要注意四点:经典写法(不做new异常的防御式编程):返回值类型声明为该类型的引用,并且返回*this。(只有返回时引用,才可以连续赋值) 是否将传入的参数设置为常量引用。(保证数据不被修改的同时避免了拷贝构造) 是否释放自己的内存。(防止分配到新内存之后无法对原有内存再控制,导致内存泄漏) 是否考虑到自赋值。(当没有考虑自赋值,会导致释放掉已有内存,传入数据的...原创 2019-06-30 10:55:13 · 368 阅读 · 0 评论 -
树中最近祖先 lowest common ancestor (LCA)
面试时候如果遇到这种题,要问清楚面试官,是普通的树还是二叉树,如果是二叉树是不是二叉排序树?如果是普通的树有没有指向父节点的指针?leetcode:235. 二叉搜索树的最近公共祖先利用二叉搜索树的特性,对于这个性质,如果从下往上找,想根据每个结点找到他们的祖先再比较就很麻烦,直接根据二叉搜索树左<中<右的特性,从上往下进行查找。class Solution {publ...原创 2019-06-29 11:57:09 · 346 阅读 · 0 评论 -
66、机器人的运动范围
题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?总结:回溯,唯一要注意的是:当你走过某个...原创 2019-06-27 17:18:57 · 105 阅读 · 0 评论 -
65、矩阵中的路径
题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e 这样的3 X 4 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字...原创 2019-06-27 17:18:51 · 124 阅读 · 0 评论 -
64、滑动窗口的最大值
题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{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,...原创 2019-06-27 17:18:45 · 101 阅读 · 0 评论 -
(☆)63、数据流中的中位数
题目描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。leetcode对应题目:295. 数据流的中位数 ...原创 2019-06-27 17:18:38 · 101 阅读 · 0 评论 -
62、二叉搜索树的第k个结点
题目描述给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。leetcode对应题目:230. 二叉搜索树中第K小的元素 题目解答总结:二叉搜索树所以想到用中序遍历。 如果这个树涉及到频繁的插入和删除怎么办?我们应该修改原树结点的结构(在题目解答里面有),使其保存包括当前结点和...原创 2019-06-27 17:18:30 · 97 阅读 · 0 评论 -
61、序列化二叉树
题目描述请实现两个函数,分别用来序列化和反序列化二叉树leetcode对应题目:297. 二叉树的序列化与反序列化 题目解答449. 序列化和反序列化二叉搜索树(感觉没区别啊,不晓得怎么利用性质,下面的方法做吧)需要思考的知识:如何建立一个二叉树?前序,中序,后续,层次。 如何实现stoi函数序列化就是将一个数据结构或物体转化为一个...原创 2019-06-27 17:17:46 · 129 阅读 · 0 评论 -
60、把二叉树打印成多行
题目描述从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。leetcode对应题目:102. 二叉树的层次遍历 题目解答107. 二叉树的层次遍历 II(逆序打印,自底向上的输出每一行) 题目解答429. N叉树的层序遍历103. 二叉树的锯齿形层次遍历(Z字型打印二叉树) 637. 二叉树的层平均值1...原创 2019-06-27 17:17:20 · 228 阅读 · 0 评论 -
59、按之字形顺序打印二叉树
题目描述请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。leetcode对应题目:103. 二叉树的锯齿形层次遍历 题目解答总结:层序遍历加双栈,因为看到这个顺序反过来,一下就想到用栈(尴尬!误打误撞!)。要注意存入顺序变化!第二行从右至左的打印,所以存入的时候从左到右存入;第三行则...原创 2019-06-26 16:42:10 · 92 阅读 · 0 评论 -
58、对称的二叉树
题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。leetcode对应题目:101. 对称二叉树 题目解答100. 相同的树 题目解答总结:使用双队列的迭代...原创 2019-06-26 16:27:52 · 81 阅读 · 0 评论 -
(☆☆)57、二叉树的下一个结点
题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。总结:中序遍历的话肯定要想到下一个是访问其右子树,分以下这几种情况: 1、如果有右子树,返回右子树最左边结点即可; 2、如果没有右子树,必定是孩子结点 2.1 若是左孩子,返回其父节点 2.2 若是右...原创 2019-06-26 16:27:44 · 92 阅读 · 0 评论 -
(☆)56、删除链表中重复的结点
题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5。leetcode对应题目:83. 删除排序链表中的重复元素(重复的节点保留一个) 题目解答82. 删除排序链表中的重复元...原创 2019-06-26 16:27:29 · 111 阅读 · 0 评论 -
55、链表中环的入口结点
题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。leetcode对应题目:链表中环的入口结点 还有找到了一个大集合。。。关于链表环问题的:链表环问题的集合 总结:leetcode优质解答下弄了一个很好理解的答案。有一个特别要注意的,链表类的问题,移动链表的时候要注意是否为空,这里因为涉及到快慢指针,所以在判断循环...原创 2019-06-26 16:27:17 · 78 阅读 · 0 评论 -
54、字符流中第一个不重复的字符
题目描述请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。总结:哈希表,哈希表中存放的是该元素第一次在字符串流中出现的位置,一开始都位置都初始化为-1,并且pos初始化为0,如果遇到一个字母没有在字符串流中出现,就修改为对应的po...原创 2019-06-26 16:27:09 · 74 阅读 · 0 评论 -
53、表示数值的字符串
题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。类似题目:leetcode65. 有效数字总结:把类别分清,然后讨论就行了。 三种特殊的字符 'e|E' ...原创 2019-06-26 16:27:03 · 91 阅读 · 0 评论 -
(☆☆☆)52、正则表达式匹配
题目描述请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配leetcode对应题目:10. 正则表达式匹配 ...原创 2019-06-26 16:26:54 · 229 阅读 · 0 评论 -
51、构建乘积数组
题目描述给定一个数组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]。不能使用除法。leetcode对应题目:238. 除自身以外数组的乘积 题目解答总结:除了自身以外的数组元素乘积,这题因为是在数组中,所...原创 2019-06-26 16:26:42 · 85 阅读 · 0 评论 -
(☆☆)50、数组中重复的数字
题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。leetcode对应题目:442. 数组中重复的数据 ...原创 2019-06-26 16:26:34 · 127 阅读 · 0 评论 -
49、把字符串转换成整数(stoi函数)
题目描述将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。输入描述:输入一个字符串,包括数字字母符号,可以为空输出描述:如果是合法的数值表达则返回该数字,否则返回0leetcode对应题目:8. 字符串转换整数...原创 2019-06-25 20:40:37 · 832 阅读 · 0 评论 -
48、不用加减乘除做加法
题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。总结:结合十进制来模拟二进制异或和与运算,从而完成加法。第一步做各位相加不进位;—— 这里可以看做是异或,因为是二进制运算,0+1 = 1 ;1+0 = 1;0+0 =0;1+1 =0。第二步做进位;—— 进行&运算左移一位,因为进位是在左边一位。第三步把前两步结果相加。对数字...原创 2019-06-25 20:40:28 · 86 阅读 · 0 评论 -
47、求1+2+3+...+n
题目描述求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。class Solution {public: int Sum_Solution(int n) { if(n == 0) return 0; int ret = n + Sum_Solutio...原创 2019-06-25 20:40:13 · 101 阅读 · 0 评论 -
46、孩子们的游戏(圆圈中最后剩下的数)
题目描述每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0...m-1报数....这样下去.....原创 2019-06-25 20:40:06 · 73 阅读 · 0 评论 -
45、扑克牌顺子
题目描述LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子.....LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K...原创 2019-06-25 20:40:01 · 192 阅读 · 0 评论 -
44、翻转单词顺序列
题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?思考:首先把整个字符...原创 2019-06-25 20:39:52 · 80 阅读 · 0 评论 -
43、左旋转字符串
题目描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!总结:为了解决44、翻转单词顺序列,我们先反转了整个句子的所有字符,然后再分别反转每个单词的字...原创 2019-06-25 20:39:45 · 67 阅读 · 0 评论 -
42、和为S的两个数字
题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。输出描述:对应每个测试案例,输出两个数,小的先输出。leetcode对应题目:167. 两数之和 II - 输入有序数组 题目解答总结:和上一题类似。这个是双指针指向两个数。跟leetcode167差不多,只不过保存下乘...原创 2019-06-25 20:39:18 · 93 阅读 · 0 评论 -
(☆☆☆)41、和为S的连续正数序列【滑动窗口】
题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!输出描述:输出所有和为S的连续正数...原创 2019-06-25 20:38:59 · 226 阅读 · 0 评论 -
40、数组中只出现一次的数字
题目描述一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。leetcode对应题目:136. 只出现一次的数字 (只有一个数字出现一次) 题目解答137. 只出现一次的数字 II(只有一个出现一次,其余出现3次) 题目解答260.只出现...原创 2019-06-24 08:39:45 · 94 阅读 · 0 评论 -
39、平衡二叉树
题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。首先真的要吐槽下这个剑指offer这题目抄袭leetcode,平衡二叉树,然后实际抄的条件都掉了,人家是“高度平衡的二叉树”!leetcode对应题目:110. 平衡二叉树 题目解答总结:如果是自顶向下的遍历,先判断当前node,在判断左子树,再判断右子树可以不?可以。但是不是好方法...原创 2019-06-24 08:39:31 · 88 阅读 · 0 评论 -
(☆☆☆)38、二叉树的深度
题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。leetcode对应题目:104. 二叉树的最大深度 题目解答总结:题目一看就是求一个最优解,然后二叉树这种大多用深搜,当然求深度就是二叉树的层数,用层次遍历(queue)实现也可以。class Solution {publi...原创 2019-06-24 08:39:08 · 111 阅读 · 0 评论 -
37、数字在排序数组中出现的次数
题目描述统计一个数字在排序数组中出现的次数。总结:这个题目中给出“排序”的字眼,就可以使用二分法。用二分查找算法在排序数组中第一个重复数字和最后一个重复数字。从而求得数字在数组中出现的次数。class Solution {public: int GetNumberOfK(vector<int> data ,int k) { if(data.emp...原创 2019-06-24 08:38:59 · 96 阅读 · 0 评论