
《程序员面试金典》专栏
面试题
hzasrd
这个作者很懒,什么都没留下…
展开
-
面试题 03.02. 栈的最小值
面试题 03.02. 栈的最小值请设计一个栈,除了常规栈支持的pop与push函数以外,还支持min函数,该函数返回栈元素中的最小值。执行push、pop和min操作的时间复杂度必须为O(1)。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minSt...原创 2020-04-30 17:22:25 · 236 阅读 · 0 评论 -
面试题 02.08. 环路检测
面试题 02.08. 环路检测给定一个有环链表,实现一个算法返回环路的开头节点。有环链表的定义:在链表中某个节点的next元素指向在它前面出现过的节点,则表明该链表存在环路。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to node index 1解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:...原创 2020-04-28 12:26:28 · 252 阅读 · 0 评论 -
面试题 02.07. 链表相交
面试题 02.07. 链表相交给定两个(单向)链表,判定它们是否相交并返回交点。请注意相交的定义基于节点的引用,而不是基于节点的值。换句话说,如果一个链表的第k个节点与另一个链表的第j个节点是同一节点(引用完全相同),则这两个链表相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], sk...原创 2020-04-27 12:22:19 · 285 阅读 · 0 评论 -
面试题 02.06. 回文链表
面试题 02.06. 回文链表编写一个函数,检查输入的链表是否是回文的。示例 1:输入: 1->2输出: false 示例 2:输入: 1->2->2->1输出: true 进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?题解:将后半部分的链表进行反转,然后比较反转后的后半部分链表和前半部分链表...原创 2020-04-26 13:23:45 · 238 阅读 · 0 评论 -
面试题 02.05. 链表求和
面试题 02.05. 链表求和给定两个用链表表示的整数,每个节点包含一个数位。这些数位是反向存放的,也就是个位排在链表首部。编写函数对这两个整数求和,并用链表形式返回结果。示例:输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295输出:2 -> 1 -> 9,即912模拟大整数加法,链表实现...原创 2020-04-24 12:52:33 · 379 阅读 · 0 评论 -
面试题 02.03. 删除中间节点
面试题 02.03. 删除中间节点实现一种算法,删除单向链表中间的某个节点(除了第一个和最后一个节点,不一定是中间节点),假定你只能访问该节点。示例:输入:单向链表a->b->c->d->e->f中的节点c结果:不返回任何数据,但该链表变为a->b->d->e->f也就是把给定的那个节点删去。解法一(效率低):...原创 2020-04-23 13:36:13 · 217 阅读 · 0 评论 -
面试题 02.02. 返回倒数第 k 个节点
面试题 02.02. 返回倒数第 k 个节点实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。注意:本题相对原题稍作改动示例:输入: 1->2->3->4->5 和 k = 2输出: 4说明:给定的k保证是有效的。解法一:先遍历一遍链表求出结点的总个数n,再遍历一遍,返回第n-k+1个结点的值。/** * De...原创 2020-04-23 12:09:32 · 229 阅读 · 0 评论 -
面试题 02.01. 移除重复节点
面试题 02.01. 移除重复节点编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。示例1: 输入:[1, 2, 3, 3, 2, 1] 输出:[1, 2, 3]示例2: 输入:[1, 1, 1, 1, 2] 输出:[1, 2]提示:链表长度在[0, 20000]范围内。 链表元素在[0, 20000]范围内。题解:指针p遍历整个链表,判断...原创 2020-04-22 13:09:32 · 205 阅读 · 0 评论 -
面试题 01.07. 旋转矩阵
面试题 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]]...原创 2020-04-19 21:25:32 · 230 阅读 · 0 评论 -
面试题 01.06. 字符串压缩
面试题 01.06. 字符串压缩难度简单37收藏分享切换为英文关注反馈字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。示例1: 输入:"aabcccccaaa" 输出:"a2b1c5a3"...原创 2020-04-18 22:48:18 · 185 阅读 · 0 评论 -
面试题 01.03. URL化
面试题 01.03. URL化难度简单6URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。(注:用Java实现的话,请使用字符数组实现,以便直接在数组上操作。)示例1: 输入:"Mr John Smith ", 13 输出:"Mr%20John%20Smith"示例2: 输入:" ...原创 2020-04-15 12:33:17 · 183 阅读 · 0 评论 -
面试题 01.01. 判定字符是否唯一
解题思路由于题目提示可以不用额外的数据结构解题,那么我们应该抛弃直观上的用set解题的方法。双重循环的暴力求解由于O(n^2)的时间复杂度,也不应该考虑。位运算方法的思路本质上,跟使用一个bool数组来记录astr的每一位是否已经出现过的思路是一样的。基于bool数组的方法:由于题目没有明确说明,根据示例我判断字符串中出现的字符应该在['a','z']之间,实践证明确实如此。基于这个...原创 2020-04-13 18:22:07 · 236 阅读 · 0 评论