随笔分类 -  《程序员面试金典(第6版)》

摘要:题目: 节点间通路。给定有向图,设计一个算法,找出两个节点之间是否存在一条路径。 示例1: 输入:n = 3, graph = [[0, 1], [0, 2], [1, 2], [1, 2]], start = 0, target = 2 输出:true示例2: 输入:n = 5, graph = 阅读全文
posted @ 2020-03-05 21:56 silentteller 阅读(597) 评论(0) 推荐(0)
摘要:题目: 动物收容所。有家动物收容所只收容狗与猫,且严格遵守“先进先出”的原则。在收养该收容所的动物时,收养人只能收养所有动物中“最老”(由其进入收容所的时间长短而定)的动物,或者可以挑选猫或狗(同时必须收养此类动物中“最老”的)。换言之,收养人不能自由挑选想收养的对象。请创建适用于这个系统的数据结构 阅读全文
posted @ 2020-03-05 21:37 silentteller 阅读(241) 评论(0) 推荐(0)
摘要:题目: 栈排序。 编写程序,对栈进行排序使最小元素位于栈顶。最多只能使用一个其他的临时栈存放数据,但不得将元素复制到别的数据结构(如数组)中。该栈支持如下操作:push、pop、peek 和 isEmpty。当栈为空时,peek 返回 -1。 示例1: 输入:["SortedStack", "pus 阅读全文
posted @ 2020-03-05 16:39 silentteller 阅读(274) 评论(0) 推荐(0)
摘要:题目: 实现一个MyQueue类,该类用两个栈来实现一个队列。 示例: MyQueue queue = new MyQueue(); queue.push(1);queue.push(2);queue.peek(); // 返回 1queue.pop(); // 返回 1queue.empty(); 阅读全文
posted @ 2020-03-05 15:57 silentteller 阅读(194) 评论(0) 推荐(0)
摘要:题目: 堆盘子。设想有一堆盘子,堆太高可能会倒下来。因此,在现实生活中,盘子堆到一定高度时,我们就会另外堆一堆盘子。请实现数据结构SetOfStacks,模拟这种行为。SetOfStacks应该由多个栈组成,并且在前一个栈填满时新建一个栈。此外,SetOfStacks.push()和SetOfSta 阅读全文
posted @ 2020-03-05 15:45 silentteller 阅读(285) 评论(0) 推荐(0)
摘要:题目: 请设计一个栈,除了常规栈支持的pop与push函数以外,还支持min函数,该函数返回栈元素中的最小值。执行push、pop和min操作的时间复杂度必须为O(1)。 示例: MinStack minStack = new MinStack();minStack.push(-2);minStac 阅读全文
posted @ 2020-03-05 15:15 silentteller 阅读(284) 评论(0) 推荐(0)
摘要:题目: 三合一。描述如何只用一个数组来实现三个栈。 你应该实现push(stackNum, value)、pop(stackNum)、isEmpty(stackNum)、peek(stackNum)方法。stackNum表示栈下标,value表示压入的值。 构造函数会传入一个stackSize参数, 阅读全文
posted @ 2020-03-04 16:26 silentteller 阅读(281) 评论(0) 推荐(0)
摘要:题目: 给定一个有环链表,实现一个算法返回环路的开头节点。有环链表的定义:在链表中某个节点的next元素指向在它前面出现过的节点,则表明该链表存在环路。 示例 1: 输入:head = [3,2,0,-4], pos = 1输出:tail connects to node index 1解释:链表中 阅读全文
posted @ 2020-03-04 15:42 silentteller 阅读(230) 评论(0) 推荐(0)
摘要:题目: 给定两个(单向)链表,判定它们是否相交并返回交点。请注意相交的定义基于节点的引用,而不是基于节点的值。换句话说,如果一个链表的第k个节点与另一个链表的第j个节点是同一节点(引用完全相同),则这两个链表相交。 示例 1: 输入:intersectVal = 8, listA = [4,1,8, 阅读全文
posted @ 2020-03-04 15:30 silentteller 阅读(231) 评论(0) 推荐(0)
摘要:题目: 编写一个函数,检查输入的链表是否是回文的。 示例 1: 输入: 1->2输出: false 示例 2: 输入: 1->2->2->1输出: true 进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题? 分析: 利用快慢指针在找到链表中点的同时,将slow指针指的元素倒置, 阅读全文
posted @ 2020-03-04 15:21 silentteller 阅读(207) 评论(0) 推荐(0)
摘要:题目: 给定两个用链表表示的整数,每个节点包含一个数位。 这些数位是反向存放的,也就是个位排在链表首部。 编写函数对这两个整数求和,并用链表形式返回结果。 示例: 输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295输出:2 -> 1 -> 9,即912进阶:假设这 阅读全文
posted @ 2020-03-03 14:52 silentteller 阅读(467) 评论(0) 推荐(0)
摘要:题目: 编写程序以 x 为基准分割链表,使得所有小于 x 的节点排在大于或等于 x 的节点之前。如果链表中包含 x,x 只需出现在小于 x 的元素之后(如下所示)。分割元素 x 只需处于“右半部分”即可,其不需要被置于左右两部分之间。 示例: 输入: head = 3->5->8->5->10->2 阅读全文
posted @ 2020-03-03 14:04 silentteller 阅读(289) 评论(0) 推荐(0)
摘要:题目: 实现一种算法,删除单向链表中间的某个节点(除了第一个和最后一个节点,不一定是中间节点),假定你只能访问该节点。 示例: 输入:单向链表a->b->c->d->e->f中的节点c结果:不返回任何数据,但该链表变为a->b->d->e->f 分析: 只给了我们所需要删除的节点。让当前结点的val 阅读全文
posted @ 2020-03-03 13:38 silentteller 阅读(191) 评论(0) 推荐(0)
摘要:题目: 实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。 注意:本题相对原题稍作改动 示例: 输入: 1->2->3->4->5 和 k = 2输出: 4说明: 给定的 k 保证是有效的。 分析: 双指针做法,快慢指针初始化为头指针,先让快指针向后移动k个节点,然后快慢指针同时向后移 阅读全文
posted @ 2020-03-03 13:25 silentteller 阅读(204) 评论(0) 推荐(0)
摘要:题目: 编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。 示例1: 输入:[1, 2, 3, 3, 2, 1] 输出:[1, 2, 3]示例2: 输入:[1, 1, 1, 1, 2] 输出:[1, 2]提示: 链表长度在[0, 20000]范围内。链表元素在[0, 20000]范围内。进 阅读全文
posted @ 2020-03-02 16:22 silentteller 阅读(320) 评论(0) 推荐(0)
摘要:题目: 字符串轮转。给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成(比如,waterbottle是erbottlewat旋转后的字符串)。 示例1: 输入:s1 = "waterbottle", s2 = "erbottlewat" 输出:True示例2: 输入:s1 = "aa", 阅读全文
posted @ 2020-03-02 16:03 silentteller 阅读(432) 评论(0) 推荐(0)
摘要:题目: 编写一种算法,若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] 阅读全文
posted @ 2020-03-02 15:42 silentteller 阅读(245) 评论(0) 推荐(0)
摘要:题目: 给定一幅由N × N矩阵表示的图像,其中每个像素的大小为4字节,编写一种方法,将图像旋转90度。 不占用额外内存空间能否做到? 示例 1: 给定 matrix = [ [1,2,3], [4,5,6], [7,8,9]], 原地旋转输入矩阵,使其变为:[ [7,4,1], [8,5,2], 阅读全文
posted @ 2020-03-02 14:55 silentteller 阅读(301) 评论(0) 推荐(0)
摘要:题目: https://leetcode-cn.com/problems/compress-string-lcci/ 字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串 阅读全文
posted @ 2020-03-01 15:48 silentteller 阅读(260) 评论(0) 推荐(0)
摘要:题目: 字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。 示例 1: 输入: first = "pale"second = "ple"输出: True 示例 2: 输入: first = "pales"secon 阅读全文
posted @ 2020-03-01 15:21 silentteller 阅读(326) 评论(0) 推荐(0)