剑指0ffer
文章平均质量分 51
TechGuide
全网同名❤️
展开
-
【每日一题】JZ23 二叉搜索树的后序遍历序列
当你的才华还撑不起你的野心时,你应该静下心去学习 。 题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。(ps:我们约定空树不是二叉搜索树) 5 / \ 2 6 / \ 1 3 输入: [1,6,3,2,5]输出: false解题思路根据二叉搜索树的定义,可以通过递归,判断所有子树的 正确性 (即其后序遍历是否满足二叉搜索树的定义...转载 2021-09-21 22:32:20 · 151 阅读 · 0 评论 -
【每日一题】JZ22 从上往下打印二叉树
当你的才华还撑不起你的野心时,你应该静下心去学习 。 题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。输入 3 / \ 9 20 / \ 15 7输出[3,9,20,15,7]解题思路特例处理: 当树的根节点为空,则直接返回空列表 [] ;初始化: 打印结果列表 res = [] ,包含根节点的队列 queue = [root] ;BFS 循环: 当队列 queue 为空时跳出;出队: 队首元素...转载 2021-09-21 22:17:31 · 84 阅读 · 0 评论 -
【每日一题】JZ21 栈的压入、弹出序列
当你的才华还撑不起你的野心时,你应该静下心去学习 。 题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)输入:[1,2,3,4,5],[4,3,5,1,2]返回值:false解题思路初始化: 辅助栈 stack ,...转载 2021-09-13 23:34:32 · 88 阅读 · 0 评论 -
【每日一题】JZ20 包含min函数的栈
当你的才华还撑不起你的野心时,你应该静下心去学习 。 题目描述设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。输入["MinStack","push","push","push","getMin","pop","top","getMin"][[],[-2],[0],[-3],[]...转载 2021-09-13 23:26:57 · 90 阅读 · 0 评论 -
【每日一题】JZ19 顺时针打印矩阵
当你的才华还撑不起你的野心时,你应该静下心去学习 。 题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]解题思路空值处理: 当 matrix 为空时,直接返回空列表 [] 即可。初始化: 矩阵 左、右、上、下 四个边界 l , r , t , b ,用于打印的结果列表 res 。循环打印: “从左向右、从上向下、从右向左...转载 2021-09-13 23:19:34 · 195 阅读 · 0 评论 -
【每日一题】JZ18 二叉树的镜像
当你的才华还撑不起你的野心时,你应该静下心去学习 。 题目描述请完成一个函数,输入一个二叉树,该函数输出它的镜像。例如输入: 4 / \ 2 7 / \ / \1 3 6 9镜像输出: 4 / \ 7 2 / \ / \9 6 3 1输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]解题思路这是一道很经典的二叉树问题。显然,我们从根节...转载 2021-09-13 23:10:31 · 77 阅读 · 0 评论 -
【每日一题】JZ17 树的子结构
当你的才华还撑不起你的野心时,你应该静下心去学习 。 题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)输入:A = [1,2,3], B = [3,1]输出:false解题思路若树 B 是树 A 的子结构,则子结构的根节点可能为树 A 的任意一个节点。因此,判断树 B 是否是树 A 的子结构,需完成以下两步工作:先序遍历树 A 中的每个节点 nA (对应函数 isSubStructure(A, B))判断树 A 中...转载 2021-09-05 20:27:41 · 104 阅读 · 0 评论 -
【每日一题】JZ16 合并两个排序的链表
当你的才华还撑不起你的野心时,你应该静下心去学习 。 题目描述将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]解题思路递归:如果 l1 或者 l2 一开始就是空链表 ,那么没有任何操作需要合并,所以我们只需要返回非空链表。否则,我们要判断 l1 和 l2 哪一个链表的头节点的值更小,然后递归地决定下一个添加到结果里的节点。如果两个链...转载 2021-09-05 20:18:53 · 82 阅读 · 0 评论 -
【每日一题】JZ15 反转链表
当你的才华还撑不起你的野心时,你应该静下心去学习 。 题目描述非常经典的一道手撕代码题(不过目前K个一组翻转会更多,但都是要掌握的),输入一个链表,反转链表后,输出新链表的表头。输入:{1,2,3}输出:{3,2,1}解题思路迭代:假设存在链表 1→2→3→∅,我们想要把它改成 ∅←1←2←3。在遍历列表时,将当前节点的 next 指针改为指向前一个元素。由于节点没有引用其上一个节点,因此必须事先存储其前一个元素。在更改引用之前,还需要另一个指针来存储下一个节点。...转载 2021-09-05 20:07:25 · 102 阅读 · 0 评论 -
【每日一题】JZ14 链表中倒数最后k个结点
当你的才华还撑不起你的野心时,你应该静下心去学习 。 题目描述输入一个链表,输出一个链表,该输出链表包含原链表中从倒数第k个结点至尾节点的全部节点。如果该链表长度小于k,请返回一个长度为 0 的链表。输入:{1,2,3,4,5},1 输出:{5}解题思路依然双指针(昨天是首尾双指针,今天是快慢指针):第一时间想到的解法就是,先遍历统计链表长度,记为 n ,再设置一个指针走 n−k 步,即可找到链表倒数第 k 个节点。再优化一点的方法就是一次遍历:初始化: 前指针...转载 2021-09-05 19:45:05 · 155 阅读 · 0 评论 -
【每日一题】JZ13 调整数组顺序使奇数位于偶数前面
当你的才华还撑不起你的野心时,你应该静下心去学习 。 题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。输入:[1,2,3,4]输出:[1,3,2,4]解题思路双指针:定义头指针 leftleft ,尾指针 rightleft 一直往右移,直到它指向的值为偶数right 一直往左移, 直到它指向的值为奇数交换 nums[left] 和 n...转载 2021-09-05 19:34:30 · 79 阅读 · 0 评论 -
【每日一题】JZ12 数值的整数次方
当你的才华还撑不起你的野心时,你应该静下心去学习 。 题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0。不得使用库函数,同时不需要考虑大数问题,也不用考虑小数点后面0的位数。输入:x = 2.00000, n = 10输出:1024.00000解题思路参考代码Java版本class Solution { public double myPow(do...转载 2021-08-29 22:04:33 · 127 阅读 · 0 评论 -
【每日一题】JZ11 二进制中1的个数
当你的才华还撑不起你的野心时,你应该静下心去学习 。 题目描述输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。示例输入:n = 11 (控制台输入 00000000000000000000000000001011)输出:3解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。解题思路观察这个运算:n & (n−1),其预算结果恰好把 n 的二进制位中的最低位的 1变为 0 。如:...转载 2021-08-29 21:22:02 · 109 阅读 · 0 评论 -
【每日一题】JZ10 矩形覆盖
当你的才华还撑不起你的野心时,你应该静下心去学习 。 题目描述我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,从同一个方向看总共有多少种不同的方法?比如n=3时,2*3的矩形块有3种不同的覆盖方法(从同一个方向看):示例解题思路假设f [n]表示2*n大矩阵的方法数。如果你下用数学归纳法,先从简单的n=1、2、3开始计算,可以得出:f[n] = f[n-1] + f[n-2],初始条件f[1] = 1, f[2]...转载 2021-08-29 21:09:39 · 86 阅读 · 0 评论 -
【每日一题】JZ9 跳台阶扩展问题
当你的才华还撑不起你的野心时,你应该静下心去学习 。 题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶(n为正整数)总共有多少种跳法。示例输入:3返回值:4解题思路对于方法一中的:f[n] = f[n-1] + f[n-2] + … + f[0]那么f[n-1] 为多少呢?f[n-1] = f[n-2] + f[n-3] + … + f[0]所以一合并,f[n] = 2*f[n-1],初始条件f[0] = f[1...转载 2021-08-29 20:59:45 · 130 阅读 · 0 评论 -
【每日一题】JZ8 跳台阶
当你的才华还撑不起你的野心时,你应该静下心去学习 。 题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。示例输入:2返回值:2解题思路设跳上 n 级台阶有 f(n) 种跳法。在所有跳法中,青蛙的最后一步只有两种情况: 跳上 1 级或 2 级台阶。当为 1 级台阶: 剩 n−1 个台阶,此情况共有 f(n−1) 种跳法;当为 2 级台阶: 剩 n−2 个台阶,此情况共有 f(n−2) 种跳法。...转载 2021-08-29 20:50:36 · 125 阅读 · 0 评论 -
【每日一题】JZ6 旋转数组的最小数字
当你的才华还撑不起你的野心时,你应该静下心去学习 。 题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。本题是练习二分法的一道经典例题,也是一道常见面试题。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。示例输入:[3,4,5,1,2]返回值:1解题思路初始化: 声明 ii, jj 双指针分别指向 numsnums 数组左右两端;循环二分: 设 m = (i + j) ...转载 2021-08-24 23:44:17 · 123 阅读 · 0 评论 -
【每日一题】JZ5 用两个栈实现队列
当你的才华还撑不起你的野心时,你应该静下心去学习 。 题目描述用两个栈来实现一个队列,分别完成在队列尾部插入整数(push)和在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。很经典的一道题目,和另一道两个队列实现栈,是一面手撕代码题的常客。示例输入:["PSH1","PSH2","POP","POP"]返回:1,2解析:"PSH1":代表将1插入队列尾部"PSH2":代表将2插入队列尾部"POP“:代表删...转载 2021-08-24 23:43:21 · 83 阅读 · 0 评论 -
【每日一题】JZ4 重建二叉树
当你的才华还撑不起你的野心时,你应该静下心去学习 。 题目描述给定某二叉树的前序遍历和中序遍历,请重建出该二叉树并返回它的头结点。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如下图所示。提示:1.0 <= pre.length <= 20002.vin.length == pre.length3.-10000 <= pre[i], vin[i] <= 100004.pre 和 ...转载 2021-08-24 00:08:58 · 106 阅读 · 0 评论 -
【每日一题】JZ3 从尾到头打印链表
当你的才华还撑不起你的野心时,你应该静下心去学习 。 题目描述输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。如输入{1,2,3}的链表如下图:返回一个数组为[3,2,1],0 <= 链表长度 <= 10000示例输入:{1,2,3}返回值:[3,2,1]解题思路有三种思路,第一就是利用栈先入后出的特性完成,第二就是存下来然后进行数组翻转,第三是利用递归。以下展示经典递归解法,也是大厂笔试和面试手撕代码中最受青睐的解题类型。请...原创 2021-08-22 23:51:14 · 93 阅读 · 0 评论 -
【每日一题】JZ2:替换空格
当你的才华还撑不起你的野心时,你应该静下心去学习 。 。 题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。示例输入:"We Are Happy"返回值:"We%20Are%20Happy"解题思路把字符串中的空格替换成%20,很简单的一道题目,但一个好的习惯是往往是从最简单的最容易做到的慢慢升级到挑战自己的程度,希望能成为你坚持打卡的好机会!这道题一...原创 2021-08-18 23:24:45 · 132 阅读 · 0 评论 -
【每日一题】JZ1:二维数组中的查找
恭喜发现宝藏!微信搜索公众号【TechGuide】关注更多新鲜好文和互联网大厂的笔经面经。作者@TechGuide【全网同名】点赞再看,养成习惯,您动动手指对原创作者意义非凡????题目描述在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]给定原创 2021-08-18 22:17:23 · 186 阅读 · 0 评论 -
剑指offer【63】数据流中的中位数 思路及题解
剑指offer【63】数据流中的中位数 思路及题解原创 2020-09-02 05:42:38 · 149 阅读 · 0 评论