面试题
EastWR
hi 你好
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LeetCode 102. Binary Tree Level Order Traversal
102. Binary Tree Level Order Traversal二叉树层序遍历 考察 BFS 的写法。 层序遍历,每行从左到右的方向输出数组元素。在这道题的基础上,还可以扩展出其他类型的层序遍历,例如 Z 字遍历。参考 103. Binary Tree Zigzag Level Order Traversal这道题属于必须掌握的题。DescriptionGiven a binary原创 2017-12-19 19:52:11 · 237 阅读 · 0 评论 -
【剑指**】24.反转链表
24.反转链表题目描述反转链表,返回反转后链表的头指针;分析情况要考虑周全;输入空指针;只有1个节点;保证反转后的链表不断开;代码/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next...原创 2018-02-27 20:55:20 · 205 阅读 · 0 评论 -
【剑指**】25.合并两个排序的链表
25.合并两个排序的链表题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。思路分析特殊条件考虑全面即可,整体做法不难代码/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : ...原创 2018-02-28 22:35:14 · 210 阅读 · 0 评论 -
【剑指**】31.栈的压入,弹出序列
31 栈的押入弹出序列题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)分析思路是,需要构造一个辅助栈来模拟给...原创 2018-03-10 10:57:06 · 410 阅读 · 0 评论 -
【剑指**】32.从上到下打印二叉树
32.从上到下打印二叉树题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。分析层序遍历二叉树,借助 队列 辅助。。代码/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : ...原创 2018-03-10 11:05:23 · 202 阅读 · 0 评论 -
【剑指**】32-2 分行从上到下打印二叉树
32-2 分行从上到下打印二叉树题目描述从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。分析有两种容易想到的方法都可以解决这个问题第一个是额外再增加一个辅助栈,将当前层和下一层的节点分开。 这种方法简单易行,但是会占用额外的空间,时间开销也会增大。第二种是用标志变量,记录每一行的的节点数。本题给出的代码是法1. 法2的代码可以参考书上。 《剑指...原创 2018-03-10 11:20:20 · 633 阅读 · 0 评论 -
【剑指**】32.从上到下打印二叉树
32.从上到下打印二叉树题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。分析层序遍历二叉树,借助 队列 辅助。。代码/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : ...原创 2018-03-10 12:07:49 · 181 阅读 · 0 评论 -
【剑指**】26.树的子结构
26.树的子结构题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)思路分析代码明明照着书写写的,一毛一样,为什么只有44%的case通过。。。。先不管了 - -!代码/*struct TreeNode { int val; struct TreeNode *left; st...原创 2018-03-03 15:20:34 · 212 阅读 · 0 评论 -
【剑指**】33.二叉搜索树的后续遍历
33.二叉搜索树的后续遍历题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。分析本题的区别之处在于,不是让你去后序遍历BST,而是给了你序列,让你来判断它是不是由一个BST的后续遍历产生的。这就要求我们对BST 已经后续遍历的特点有所了解。BST 是有序的树,树节点的值大...原创 2018-03-11 10:06:14 · 217 阅读 · 0 评论 -
【剑指**】34 二叉树中和为某一值的路径
34 二叉树中和为某一值的路径题目描述输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。思路分析这个题目也是很经典的,但是我今天太困了,,,,状态不好反反复复做了好几遍才ac清醒了,再重新看一看吧代码/*struct TreeNode { in...原创 2018-03-11 11:21:25 · 181 阅读 · 0 评论 -
【剑指**】27.二叉树的镜像
27.二叉树的镜像题目描述操作给定的二叉树,将其变换为源二叉树的镜像。《剑指Offer》 p157题目思路对于根节点,只需要交换左右两个节点的指针即可。然后确定遍历二叉树的方式就行。这里由于要先操作 根节点。所以采用前序遍历。 root->left->right的顺序。代码/*struct TreeNode { int ...原创 2018-03-04 09:46:33 · 179 阅读 · 0 评论 -
【剑指**】35.复杂链表的复制
35.复杂链表的复制题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)思路没有细看书上的思路,但是貌似讲的有点复杂。这道题目看上去复杂,其实实现起来很简单,分2步就可以。Step 1...原创 2018-03-11 21:05:45 · 289 阅读 · 0 评论 -
【剑指**】36 二叉搜索树与双向链表
36 二叉搜索树与双向链表题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路需要注意, last 在函数里,用的是 指针的指针。 如果不这样做,会报错;自己对指针这部分理解的也不是很深,这部分以后还要再好好看看代码/*struct TreeNode { int v...原创 2018-03-12 10:31:52 · 250 阅读 · 0 评论 -
【剑指**】28.对称的二叉树
28.对称的二叉树题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。题目分析编写与前序遍历对称的遍历方法,同时把空指针也加入到遍历的结果中。ps: 这个思路看上去简单,可写出来,还是觉得原作者好厉害。。代码/*struct TreeNode { int val; ...原创 2018-03-05 11:19:31 · 204 阅读 · 0 评论 -
【剑指**】29.顺时针打印矩阵
29.顺时针打印矩阵题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.题目分析思路请参考《剑指offer》 p161这道题目比较绕,边界容易写错...原创 2018-03-05 14:59:47 · 232 阅读 · 0 评论 -
【剑指**】30.包含min函数的栈
30.包含min函数的栈题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。思路分析思路参考书上。有STL,所以偷懒了,直接调用一下,这样题目就变得简单了但是有一点要注意, STL 里的 stack。在pop 和 top 时,要记得检查是否为空。否则会出错。当时在写的时候,自以为 STL 很完善了,判空这种问题肯定会做好了,但是结...原创 2018-03-06 15:16:53 · 183 阅读 · 0 评论 -
【剑指**】38.字符串的排列
38.字符串的排列题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。分析思路就来自书上,用递归的思想来做。代码class Solution...原创 2018-03-13 19:48:16 · 357 阅读 · 0 评论 -
【剑指**】23.链表中环的入口节点
23.链表中环的入口节点题目描述一个链表中包含环,请找出该链表的环的入口结点。没有环则返回空。分析思路和《剑指offer》上的一样。分三个步骤。第一步,判断链表中是否存在环。第二步,判断环的大小第三步,得到环的入口节点代码/*struct ListNode { int val; struct ListNode *next;...原创 2018-02-26 15:14:49 · 225 阅读 · 0 评论 -
【剑指**】22.链表中倒数第k个节点
22.链表中倒数第k个节点题目描述输入一个链表,输出该链表中倒数第k个结点。分析每一道面试题都会有一个小点等待我们去解决。只有把这个点找到了,才算真正通过了题目的考验。本题可以分为两个考点。第一个如书上所说,考查代码的鲁棒性。针对输入边界边界条件,参数做好检查就可以了。第二个考查编程思路。本题是问倒数第k个节点。但是由于链表是单链表,所以很自然的我们需要把倒原创 2018-01-29 22:02:56 · 245 阅读 · 0 评论 -
LeetCode 103. Binary Tree Zigzag Level Order Traversal
103. Binary Tree Zigzag Level Order TraversalDescriptionGiven a binary tree, return the zigzag level order traversal of its nodes’ values. (ie, from left to right, then right to left for the next level原创 2017-12-19 19:59:01 · 197 阅读 · 0 评论 -
LeetCode 15. 3Sum
15. 3Sum题目描述Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.Note: The solution set must not co原创 2017-12-02 21:32:31 · 206 阅读 · 0 评论 -
LeetCode 31.Next Permutation
31.Next Permutation本题主要想介绍 inplace 的交换数据该如何实现。在c++中,可以通过位操作来实现这一点。关于位操作,常用的技巧是 一个 0XF 是四个1,这里需要16个1,所以0XFFFF。前把8作为高位,后8位作为低位。因为一般的运算,8位足够了。Implement next permutation, which rearranges numbers into原创 2017-12-11 19:31:49 · 174 阅读 · 0 评论 -
【剑指**】5.替换空格
5. 替换空格题目描述请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路思路就是书上的思路。两个指针操作。 传入的指针实际上上是数组头; 注意参数 length 不是字符的长度,而是数据空间的长度; 所以,字符的长度,要根据 ‘\0’ 的条件,自己去计算一遍;好久没写指针,都忘了 怎么原创 2017-12-21 10:45:01 · 184 阅读 · 0 评论 -
【剑指**】6.从尾到头打印链表
6.从尾到头打印链表题目描述输入一个链表,从尾到头打印链表每个节点的值。题目很经典,因此本文用三种方法来处理。(严格来说算2种)思路1先顺序输出链表数据,然后翻转输出的结果。/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) :*原创 2017-12-22 09:54:27 · 184 阅读 · 0 评论 -
【剑指**】7.重建二叉树
7.重建二叉树题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路思路和书上的一样。 复述一下将问题分解为每次确定父节点,和左右子树集合的问题。 第一个父节点即是根节点。前序遍历:根 左 右 中序遍历原创 2017-12-23 20:06:31 · 204 阅读 · 0 评论 -
【剑指**】10.斐波那契数列
10.斐波那契数列考察递归与循环的写法。思路1 递归class Solution {public: int Fibonacci(int n) { int ret = help(n); return ret; } int help(int n) { if (n <= 0) return 0; if (n == 1原创 2018-01-02 18:45:27 · 256 阅读 · 0 评论 -
【剑指**】18.2-删除链表中的重复节点
18.2 删除链表中的重复节点题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5思路分析好久没有玩C++的指针,竟然忘了 delete。。。所以,本题就是要提醒一下自己,c++指针资源的释放,不要忘记delete。然后在给它指向 NULL。链表的题目相对比较简单,但是原创 2018-01-21 14:57:44 · 211 阅读 · 0 评论 -
二叉树的三种遍历-中序-前序-后序
二叉树的三种遍历:中序,前序,后序/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NU...原创 2017-12-28 15:58:24 · 294 阅读 · 0 评论 -
【剑指**】19.正则表达式匹配
19.正则表达式匹配题目描述请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配思路分析正则表达式用有限状态机的思想去原创 2018-01-22 10:21:38 · 230 阅读 · 0 评论 -
【剑指**】递归附加题-变态跳台阶
递归附加题-变态跳台阶题目描述有一个n级的台阶,青蛙一次可以跳1次,也可以跳2次,…,也可以跳n次。问青蛙跳上一个n级的台阶,总共有多少种跳法。题目分析本题是斐波那契数列的升级版。按照这样的思路去分析。 用Fib(n) 表示青蛙跳上n阶台阶的跳法数。(设定 Fib(0) = 1)当n=1时,只有1种跳法: Fib(1) = 1只有1种情况,跳1步,一种跳法;原创 2018-01-05 09:19:18 · 218 阅读 · 0 评论 -
13.机器人的运动范围
13.机器人的运动范围题目和代码来自书上以下是牛客网上ac过的代码class Solution {public: int movingCount(int threshold, int rows, int cols) { if (threshold 0 || rows 0 || cols 0) return 0; vectorvect原创 2018-01-15 11:12:03 · 204 阅读 · 0 评论 -
【剑指**】20.表示数值的字符串
20.表示数值的字符串题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。题目分析详细分析请参考 《剑指OFFER》第二版 p127这道题目非常经典,因为它原创 2018-01-24 14:24:49 · 229 阅读 · 0 评论 -
【剑指**】12.矩阵中的路径
12.矩阵中的路径思路源自书上的。回溯法 但是有一个问题,我仿照书上的代码,自己写了一遍,逻辑一模一样,只是个别变量不同。但是 牛客网上 怎么搞也通不过。用书上的代码是可以通过的。对比了半天也没发现区别所在。不知道是代码的问题,还是oj的问题。我的代码class Solution {public: bool hasPath(char* matrix, int r原创 2018-01-09 15:14:58 · 229 阅读 · 0 评论 -
【剑指**】21.调整数组顺序使奇数位于偶数前面
21.调整数组顺序使奇数位于偶数前面题目描述1输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分.分析题目描述1是《剑指OFFER》上给出的描述。只要求数组前面是奇数,后面是偶数。没要求保持相对位置不变,相对比较简单。代码class Solution {public: v原创 2018-01-28 15:02:45 · 160 阅读 · 0 评论 -
【剑指**】17.打印从1到最大的n位数
17.打印从1到最大的n位数题目描述输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印出1,2,3一直到最大的3位数999.思路分析考查大数的表示与计算.代码代码将分为3个模块。增长数字。打印数字。/* * 面试题17. 打印从1到最大的n位数 */#include <iostream>#include <vector>using namespace std;bool i原创 2018-01-20 11:52:34 · 181 阅读 · 0 评论 -
【剑指**】39 数组中出现次数超过一半的数字
数组中出现次数超过一半的数字题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。思路方法都是书上的,好心塞,法1做了好几遍,总是超时,不知道哪里错了,只是顺便复习了快拍,还是法2简单。。我日...原创 2018-03-14 10:45:16 · 326 阅读 · 0 评论
分享