《程序员面试金典(第6版)》面试题 02.07. 链表相交(查找节点操作,哈希表,双指针(先走n步法,交替遍历法))

题目描述 图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链式结构中不存在环。 注意,函数返回结果后,链表必须 保持其原始结构 。 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Intersected at '8'解释: 相交节点的值为 8 (...

《程序员面试金典(第6版)》面试题 02.08. 环路检测(哈希法,双指针,检测链表是否有环)

题目描述 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。 示例 1: 输入:head = [3,2,0,-4], pos = 1 输出:tail connect...

《程序员面试金典(第6版)》面试题 02.01. 移除重复节点(哈希映射,多指针暴力破解,链表)

题目描述 示例1: 输入:[1, 2, 3, 3, 2, 1] 输出:[1, 2, 3] 示例2: 输入:[1, 1, 1, 1, 2] 输出:[1, 2] 提示: 链表长度在[0, 20000]范围内。链表元素在[0, 20000]范围内。 进阶: 如果不得使用临时缓冲区,该怎么解决? 解题思路与代码 这道题是一道比较简单的题。主要考验的是你对链表这种数据结构的操作能力。比如如何删除一个节点。其次呢...

《程序员面试金典(第6版)》面试题 02.03. 删除中间节点(特殊的删除节点操作)

题目描述 假定已知链表的某一个中间节点,请实现一种算法,将该节点从链表中删除。 例如:传入节点 c(位于单向链表 a->b->c->d->e->f 中),将其删除后,剩余链表为 a->b->d->e->f 示例: 输入:节点 5 (位于单向链表 4->5->1->9 中)输出:不返回任何数据,从链表中删除传入的节点 5,使链表变为 4->1->9 解题思路与代码 这道题算是一道比较简单的题。它考验了...

《程序员面试金典(第6版)》面试题 02.06. 回文链表(双指针(快慢指针),查找链表中间节点,反转链表)

题目描述 示例 1: 输入: 1->2输出: false 示例 2: 输入: 1->2->2->1输出: true 进阶: 你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题? 解题思路与代码 这是一道有关链表操作的题,不算特别的难。考到了链表的几个基础的操作,像是反转链表,创建一个新的链表,找到链表的中间节点,用什么方式去找。所以,需要你对链表的基础操作有一定的理解,如果你对链表的操...

《程序员面试金典(第6版)》面试题 16.18. 模式匹配(暴力破解 + 剪枝)

题目描述 示例 1: 输入: pattern = "abba", value = "dogcatcatdog"输出: true 示例 2: 输入: pattern = "abba", value = "dogcatcatfish"输出: false 示例 3: 输入: pattern = "aaaa", value = "dogcatcatdog"输出: false 示例 4: 输入: patt...

《程序员面试金典(第6版)》面试题 16.20. T9键盘(哈希映射,C++)

题目描述 映射如下图所示: 示例 1: 输入: num = "8733", words = ["tree", "used"]输出: ["tree", "used"] 示例 2: 输入: num = "2", words = ["a", "b", "c", "d"]输出: ["a", "b", "c"] 提示: num.length <= 1000words.length <= 500words[i...

《程序员面试金典(第6版)面试题 16.09. 运算

题目描述 你的实现应该支持如下操作: Operations() 构造函数minus(a, b) 减法,返回a - bmultiply(a, b) 乘法,返回a * bdivide(a, b) 除法,返回a / b 示例: Operations operations = new Operations();operations.minus(1, 2); //返回-1operations.multipl...

《程序员面试金典(第6版)面试题 16.10. 生存人数(前缀和思想)

题目描述 你可以假设所有人都出生于 1900 年至 2000 年(含 1900 和 2000 )之间。如果一个人在某一年的任意时期处于生存状态,那么他应该被纳入那一年的统计中。例如,生于 1908 年、死于 1909 年的人应当被列入 1908 年和 1909 年的计数。 如果有多个年份生存人数相同且均为最大值,输出其中最小的年份。 示例: 输入:birth = [1900, 1901, 1950]...

《程序员面试金典(第6版)》面试题 16.07. 最大数值(移位 + 整形提升)

题目描述 示例: 输入: a = 1, b = 2输出: 2 解题思路与代码 我真的觉得这道题很智障,但是你先别急。 这道题目的意义在于让你使用一种不常见的方法来解决一个常见问题。它可以锻炼你的编程技巧和思维能力,让你在解决问题时考虑不同的方法。 方法一: 提升整形 + 移位 这个解法中,我们首先计算两个数之间的差值,并将其存储为一个长整型变量(long) diff。然后我们右移diff 63 位,并...
© 2024 LMLPHP 关于我们 联系我们 友情链接 耗时0.006541(s)
2024-04-30 14:56:22 1714460182