从0开始的程序员面试题
Kitsuha
提升自我中
展开
-
LCR 022. 环形链表 II
给定一个链表,返回链表开始入环的第一个节点。从链表的头节点开始沿着。指针进入环的第一个节点为环的入口节点。如果链表无环,则返回。来表示链表尾连接到链表中的位置(索引从 0 开始)。链表中有一个环,其尾部连接到第二个节点。链表中有一个环,其尾部连接到第一个节点。为了表示给定链表中的环,我们使用整数。分享两个判断链表中环的位置的方法。返回索引为 1 的链表节点。返回索引为 0 的链表节点。,则在该链表中没有环。不允许修改给定的链表。原创 2024-01-04 17:52:01 · 504 阅读 · 0 评论 -
【面试题 04.10. 检查子树】
检查子树。你有两棵非常大的二叉树:T1,有几万个节点;T2,有几万个节点。设计一个算法,判断 T2 是否为 T1 的子树。如果 T1 有这么一个节点 n,其子树与 T2 一模一样,则 T2 为 T1 的子树,也就是说,从节点 n 处把树砍断,得到的树与 T2 完全相同。注意:此题相对书上原题略有改动。示例1:输入:t1 = [1, 2, 3], t2 = [2]输出:true示例2:输入:t1 = [1, null, 2, 4], t2 = [3, 2]输出:false提...原创 2022-02-23 17:31:21 · 141 阅读 · 0 评论 -
【面试题 04.09. 二叉搜索树序列】
从左向右遍历一个数组,通过不断将其中的元素插入树中可以逐步地生成一棵二叉搜索树。给定一个由不同节点组成的二叉搜索树,输出所有可能生成此树的数组。示例:给定如下二叉树 2 / \ 1 3返回:[ [2,1,3], [2,3,1]]通过次数7,758提交次数16,176来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/bst-sequences-lcci著作权归领扣网络所有...原创 2022-02-22 19:23:08 · 312 阅读 · 0 评论 -
【面试题 04.08. 首个共同祖先】
设计并实现一个算法,找出二叉树中某两个节点的第一个共同祖先。不得将其他的节点存储在另外的数据结构中。注意:这不一定是二叉搜索树。例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4] 3 / \ 5 1/ \ / \6 2 0 8 / \7 4示例 1:输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出: 3解释: 节点 5 和节点 1 的最近公...原创 2022-02-21 15:17:51 · 182 阅读 · 0 评论 -
【面试题 04.06. 后继者】
设计一个算法,找出二叉搜索树中指定节点的“下一个”节点(也即中序后继)。如果指定节点没有对应的“下一个”节点,则返回null。示例 1:输入: root = [2,1,3], p = 1 2/ \1 3输出: 2示例 2:输入: root = [5,3,6,2,4,null,null,1], p = 6 5 / \ 3 6 / \ 2 4/ 1输出: null通过次数23,712提交次数40,005来...原创 2022-02-20 13:29:38 · 399 阅读 · 0 评论 -
【面试题 04.05. 合法二叉搜索树】
实现一个函数,检查一棵二叉树是否为二叉搜索树。示例1:输入: 2 / \ 1 3输出: true示例2:输入: 5 / \ 1 4 / \ 3 6输出: false解释: 输入为: [5,1,4,null,null,3,6]。 根节点的值为 5 ,但是其右子节点值为 4 。通过次数28,898提交次数81,854来源:力扣(LeetCode)链接:https://leetcode-cn.com/probl...原创 2022-02-19 22:26:39 · 309 阅读 · 0 评论 -
【面试题 04.04. 检查平衡性】
实现一个函数,检查二叉树是否平衡。在这个问题中,平衡树的定义如下:任意一个节点,其两棵子树的高度差不超过 1。示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4] 1 / \ 2 2 / \ 3 3/ \4 4返回false 。通过次数36,258...原创 2022-02-18 23:35:25 · 147 阅读 · 0 评论 -
【面试题 04.03. 特定深度节点链表】
给定一棵二叉树,设计一个算法,创建含有某一深度上所有节点的链表(比如,若一棵树的深度为 D,则会创建出 D 个链表)。返回一个包含所有深度的链表的数组。示例:输入:[1,2,3,4,5,null,7,8] 1 / \ 2 3 / \ \ 4 5 7 / 8输出:[[1],[2,3],[4,5,7],[8]]通过次数26,816提交次数33,297来源:力扣(LeetCode)链接:ht...原创 2022-02-18 00:02:34 · 105 阅读 · 0 评论 -
【面试题 04.02. 最小高度树】
给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉搜索树。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5通过次数38,089提交次数48,270来源:力扣(LeetCode)链接:https://leetcode-cn...原创 2022-02-16 19:10:10 · 109 阅读 · 0 评论 -
【面试题 04.01. 节点间通路】
节点间通路。给定有向图,设计一个算法,找出两个节点之间是否存在一条路径。示例1:输入:n = 3, graph = [[0, 1], [0, 2], [1, 2], [1, 2]], start = 0, target = 2输出:true示例2:输入:n = 5, graph = [[0, 1], [0, 2], [0, 4], [0, 4], [0, 1], [1, 3], [1, 4], [1, 3], [2, 3], [3, 4]], start = 0, target = 4...原创 2022-02-15 20:15:44 · 309 阅读 · 0 评论 -
【面试题 03.06. 动物收容所】
动物收容所。有家动物收容所只收容狗与猫,且严格遵守“先进先出”的原则。在收养该收容所的动物时,收养人只能收养所有动物中“最老”(由其进入收容所的时间长短而定)的动物,或者可以挑选猫或狗(同时必须收养此类动物中“最老”的)。换言之,收养人不能自由挑选想收养的对象。请创建适用于这个系统的数据结构,实现各种操作方法,比如enqueue、dequeueAny、dequeueDog和dequeueCat。允许使用Java内置的LinkedList数据结构。enqueue方法有一个animal参数,animal[0原创 2022-02-15 18:13:41 · 138 阅读 · 0 评论 -
【面试题 03.05. 栈排序】
栈排序。 编写程序,对栈进行排序使最小元素位于栈顶。最多只能使用一个其他的临时栈存放数据,但不得将元素复制到别的数据结构(如数组)中。该栈支持如下操作:push、pop、peek 和 isEmpty。当栈为空时,peek返回 -1。示例1:输入:["SortedStack", "push", "push", "peek", "pop", "peek"][[], [1], [2], [], [], []]输出:[null,null,null,1,null,2]示例2:输入:[...原创 2022-02-13 14:09:38 · 111 阅读 · 0 评论 -
【面试题 03.04. 化栈为队】
实现一个MyQueue类,该类用两个栈来实现一个队列。示例:MyQueue queue = new MyQueue();queue.push(1);queue.push(2);queue.peek(); // 返回 1queue.pop(); // 返回 1queue.empty(); // 返回 false说明:你只能使用标准的栈操作 -- 也就是只有 push to top, peek/pop from top, size 和 is empty 操作是合法的。你所使..原创 2022-02-12 12:48:18 · 109 阅读 · 0 评论 -
【面试题 03.03. 堆盘子】
堆盘子。设想有一堆盘子,堆太高可能会倒下来。因此,在现实生活中,盘子堆到一定高度时,我们就会另外堆一堆盘子。请实现数据结构SetOfStacks,模拟这种行为。SetOfStacks应该由多个栈组成,并且在前一个栈填满时新建一个栈。此外,SetOfStacks.push()和SetOfStacks.pop()应该与普通栈的操作方法相同(也就是说,pop()返回的值,应该跟只有一个栈时的情况一样)。 进阶:实现一个popAt(int index)方法,根据指定的子栈,执行pop操作。当某个栈为空时,应当删原创 2022-02-11 13:28:49 · 132 阅读 · 0 评论 -
【面试题 03.02. 栈的最小值】
请设计一个栈,除了常规栈支持的pop与push函数以外,还支持min函数,该函数返回栈元素中的最小值。执行push、pop和min操作的时间复杂度必须为O(1)。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.getMin(); --> 返回 -3.minStack.pop();minStack.top(); --&...原创 2022-02-10 21:30:54 · 179 阅读 · 0 评论 -
【面试题 03.01. 三合一】
三合一。描述如何只用一个数组来实现三个栈。你应该实现push(stackNum, value)、pop(stackNum)、isEmpty(stackNum)、peek(stackNum)方法。stackNum表示栈下标,value表示压入的值。构造函数会传入一个stackSize参数,代表每个栈的大小。示例1:输入:["TripleInOne", "push", "push", "pop", "pop", "pop", "isEmpty"][[1], [0, 1], [0, 2], .原创 2022-02-09 17:41:46 · 402 阅读 · 0 评论 -
【面试题 02.08. 环路检测】
给定一个链表,如果它是有环链表,实现一个算法返回环路的开头节点。若环不存在,请返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。示例 1:正在上传…重新上传取消输入:head = [3,2,0,-4], pos = 1输出:tail co原创 2022-02-08 21:30:42 · 125 阅读 · 0 评论 -
【面试题 02.07. 链表相交】
给你两个单链表的头节点headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。图示两个链表在节点 c1 开始相交:题目数据 保证 整个链式结构中不存在环。注意,函数返回结果后,链表必须 保持其原始结构 。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Intersected at '.原创 2022-02-07 20:43:30 · 145 阅读 · 0 评论 -
【面试题 02.06. 回文链表】
编写一个函数,检查输入的链表是否是回文的。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/palindrome-linked-list-lcci著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。方法一:双指针我们知道一个有向链表中,是不能指向前一个指针的,所以我们遍历链表,把..原创 2022-02-02 22:17:24 · 168 阅读 · 0 评论 -
【面试题 02.05. 链表求和】
给定两个用链表表示的整数,每个节点包含一个数位。这些数位是反向存放的,也就是个位排在链表首部。编写函数对这两个整数求和,并用链表形式返回结果。示例:输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295输出:2 -> 1 -> 9,即912进阶:思考一下,假设这些数位是正向存放的,又该如何解决呢?示例:输入:(6 -> 1 -> 7) + (2 -> 9 -> 5),即617 + 29原创 2022-02-06 17:58:17 · 90 阅读 · 0 评论 -
【面试题 02.04. 分割链表】
给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。你不需要保留每个分区中各节点的初始相对位置。示例 1:输入:head = [1,4,3,2,5,2], x = 3输出:[1,2,2,4,3,5]示例 2:输入:head = [2,1], x = 2输出:[1,2]提示:链表中节点的数目在范围 [0, 200] 内-100 <= Node.val <= 100...原创 2022-02-06 01:11:56 · 226 阅读 · 0 评论 -
【面试题 02.03. 删除中间节点】
若链表中的某个节点,既不是链表头节点,也不是链表尾节点,则称其为该链表的「中间节点」。假定已知链表的某一个中间节点,请实现一种算法,将该节点从链表中删除。例如,传入节点 c(位于单向链表 a->b->c->d->e->f 中),将其删除后,剩余链表为 a->b->d->e->f示例:输入:节点5(位于单向链表4->5->1->9中)输出:不返回任何数据,从链表中删除传入的节点 5,使链表变为4->1...原创 2022-02-03 20:27:32 · 111 阅读 · 0 评论 -
【面试题 02.02. 返回倒数第 k 个节点】
实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。注意:本题相对原题稍作改动示例:输入: 1->2->3->4->5 和 k = 2输出: 4说明:给定的 k 保证是有效的。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/kth-node-from-end-of-list-lcci著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。方法:双指针创建两个指针均指向he原创 2022-02-01 22:08:26 · 1065 阅读 · 0 评论 -
【面试题 02.01. 移除重复节点】
编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。示例1:输入:[1, 2, 3, 3, 2, 1]输出:[1, 2, 3]示例2:输入:[1, 1, 1, 1, 2]输出:[1, 2]提示:链表长度在[0, 20000]范围内。链表元素在[0, 20000]范围内。进阶:如果不得使用临时缓冲区,该怎么解决?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-duplicate-node-...原创 2022-01-31 12:50:59 · 430 阅读 · 0 评论 -
【面试题 01.09. 字符串轮转】
字符串轮转。给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成(比如,waterbottle是erbottlewat旋转后的字符串)。示例1:输入:s1 = "waterbottle", s2 = "erbottlewat"输出:True示例2:输入:s1 = "aa", s2 = "aba"输出:False提示:字符串长度在[0, 100000]范围内。说明:你能只调用一次检查子串的方法吗?来源:力扣(LeetCode)链接:https://leet...原创 2022-01-30 23:17:15 · 754 阅读 · 0 评论 -
【面试题 01.08. 零矩阵】
编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零。示例 1:输入:[ [1,1,1], [1,0,1], [1,1,1]]输出:[ [1,0,1], [0,0,0], [1,0,1]]示例 2:输入:[ [0,1,2,0], [3,4,5,2], [1,3,1,5]]输出:[ [0,0,0,0], [0,4,5,0], [0,3,1,0]]来源:力扣(LeetCode)链接:https://lee...原创 2022-01-30 00:41:17 · 382 阅读 · 0 评论 -
【面试题 01.07. 旋转矩阵】
给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。不占用额外内存空间能否做到?示例 1:给定 matrix =[ [1,2,3], [4,5,6], [7,8,9]],原地旋转输入矩阵,使其变为:[ [7,4,1], [8,5,2], [9,6,3]]示例 2:给定 matrix =[ [ 5, 1, 9,11], [ 2, 4, 8,10], [13, 3, 6, 7],...原创 2022-01-28 23:11:08 · 118 阅读 · 0 评论 -
【面试题 01.06. 字符串压缩】
字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。示例1:输入:"aabcccccaaa"输出:"a2b1c5a3"示例2:输入:"abbccd"输出:"abbccd"解释:"abbccd"压缩后为"a1b2c2d1",比原字符串长度更长。提示:字符串长度在[0, 50000]范围内。来...原创 2022-01-27 21:33:56 · 247 阅读 · 0 评论 -
【面试题 01.05. 一次编辑】
字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。示例1:输入:first = "pale"second = "ple"输出: True示例2:输入:first = "pales"second = "pal"输出: False来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/one-away-lcci著作权归领扣网络所有...原创 2022-01-26 22:29:16 · 171 阅读 · 0 评论 -
【面试题 01.04. 回文排列】
给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。回文串不一定是字典当中的单词。示例1:输入:"tactcoa"输出:true(排列有"tacocat"、"atcocta",等等)来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/palindrome-permutation-lcci著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。原创 2022-01-25 20:50:37 · 134 阅读 · 0 评论 -
【面试题 01.03. URL化】
URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。(注:用Java实现的话,请使用字符数组实现,以便直接在数组上操作。)示例 1:输入:"Mr John Smith ", 13输出:"Mr%20John%20Smith"示例 2:输入:" ", 5输出:"%20%20%20%20%20"提示:字符串长度在 [0, 500000] 范围内。来源:力扣(Leet...原创 2022-01-24 20:08:03 · 5618 阅读 · 0 评论 -
【面试题 01.02. 判定是否互为字符重排】
给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。示例 1:输入: s1 = "abc", s2 = "bca"输出: true示例 2:输入: s1 = "abc", s2 = "bad"输出: false说明:0 <= len(s1) <= 1000 <= len(s2) <= 100来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/che.原创 2022-01-23 14:38:35 · 927 阅读 · 0 评论 -
【面试题 01.01. 判定字符是否唯一】
实现一个算法,确定一个字符串 s 的所有字符是否全都不同。示例 1:输入: s = "leetcode"输出: false示例 2:输入: s = "abc"输出: true限制:0 <= len(s) <= 100如果你不使用额外的数据结构,会很加分。通过次数103,427提交次数144,733来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/is-unique-lcci著作权归领扣网络所有。商业转载请联.原创 2022-01-22 22:08:31 · 231 阅读 · 0 评论