leetcode程序员面试金典
东山阿强
流媒体
展开
-
面试题 08.11. 硬币(java)
硬币。给定数量不限的硬币,币值为25分、10分、5分和1分,编写代码计算n分有几种表示法。(结果可能会很大,你需要将结果模上1000000007) 示例1: 输入: n = 5 输出:2 解释: 有两种方式可以凑成总金额: 5=5 5=1+1+1+1+1 示例2: 输入: n = 10 输出:4 解释: 有四种方式可以凑成总金额: 10=10 10=5+5 10=5+1+1+1+...原创 2020-04-23 16:25:36 · 400 阅读 · 0 评论 -
※面试题 04.01 节点间通路(java)(邻接表,BFS,DFS)
节点间通路。给定有向图,设计一个算法,找出两个节点之间是否存在一条路径。 示例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]...原创 2020-03-13 21:37:49 · 343 阅读 · 0 评论 -
面试题 03.05 栈排序(java )
栈排序。 编写程序,对栈进行排序使最小元素位于栈顶。最多只能使用一个其他的临时栈存放数据,但不得将元素复制到别的数据结构(如数组)中。该栈支持如下操作:push、pop、peek 和 isEmpty。当栈为空时,peek 返回 -1。 示例1: 输入: ["SortedStack", "push", "push", "peek", "pop", "peek"] [[], [1], [2], ...原创 2020-03-13 19:23:01 · 399 阅读 · 0 评论 -
面试题 03.03 堆盘子(java)
堆盘子。设想有一堆盘子,堆太高可能会倒下来。因此,在现实生活中,盘子堆到一定高度时,我们就会另外堆一堆盘子。请实现数据结构SetOfStacks,模拟这种行为。SetOfStacks应该由多个栈组成,并且在前一个栈填满时新建一个栈。此外,SetOfStacks.push()和SetOfStacks.pop()应该与普通栈的操作方法相同(也就是说,pop()返回的值,应该跟只有一个栈时的情况一样)。...原创 2020-03-13 17:55:08 · 197 阅读 · 0 评论 -
面试题 02.08 环路检测(java)(快慢指针)
给定一个有环链表,实现一个算法返回环路的开头节点。 有环链表的定义:在链表中某个节点的next元素指向在它前面出现过的节点,则表明该链表存在环路。 示例 1: 输入:head = [3,2,0,-4], pos = 1 输出:tail connects to node index 1 解释:链表中有一个环,其尾部连接到第二个节点。 示例 2: 输入:head = [1,2], pos =...原创 2020-03-12 19:21:54 · 361 阅读 · 1 评论 -
1013 将数组分成和相等的三个部分(java)
给你一个整数数组 A,只有可以将其划分为三个和相等的非空部分时才返回 true,否则返回 false。 形式上,如果可以找出索引 i+1 < j 且满足 (A[0] + A[1] + ... + A[i] == A[i+1] + A[i+2] + ... + A[j-1] == A[j] + A[j-1] + ... + A[A.length - 1]) 就可以将数组三等分。 示例...原创 2020-03-11 11:08:44 · 173 阅读 · 0 评论 -
面试题 17.16 按摩师(java)
一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间最长),返回总的分钟数。 注意:本题相对原题稍作改动 示例 1: 输入: [1,2,3,1] 输出: 4 解释: 选择 1 号预约和 3 号预约,总时长 = 1 + 3 = 4。 示例 2: 输入:...原创 2020-03-10 19:29:26 · 356 阅读 · 0 评论 -
面试题 17.12 BiNode(java)
二叉树数据结构TreeNode可用来表示单向链表(其中left置空,right为下一个链表节点)。实现一个方法,把二叉搜索树转换为单向链表,要求值的顺序保持不变,转换操作应是原址的,也就是在原始的二叉搜索树上直接修改。 返回转换后的单向链表的头节点。 注意:本题相对原题稍作改动 示例: 输入: [4,2,5,1,3,null,6,0] 输出: [0,null,1,null,2,nul...原创 2020-03-10 19:03:42 · 374 阅读 · 1 评论 -
面试题 16.07 最大数值(java)
编写一个方法,找出两个数字a和b中最大的那一个。不得使用if-else或其他比较运算符。 示例: 输入: a = 1, b = 2 输出: 2 class Solution { public int maximum(int a, int b) { long p = (long)a; long q = (long)b; return (i...原创 2020-03-09 23:10:33 · 271 阅读 · 0 评论 -
面试题 08.10 颜色填充(java)(dfs)
颜色填充。编写函数,实现许多图片编辑软件都支持的“颜色填充”功能。给定一个屏幕(以二维数组表示,元素为颜色值)、一个点和一个新的颜色值,将新颜色值填入这个点的周围区域,直到原来的颜色值全都改变。 示例1: 输入: image = [[1,1,1],[1,1,0],[1,0,1]] sr = 1, sc = 1, newColor = 2 输出:[[2,2,2],[2,2,0],[2,0,...原创 2020-03-09 18:58:11 · 454 阅读 · 0 评论 -
面试题 08.01 三步问题(java)
三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。 示例1: 输入:n = 3 输出:4 说明: 有四种走法 示例2: 输入:n = 5 输出:13 提示: n范围在[1, 1000000]之间 来源:力扣(LeetCode) 链接:https://lee...原创 2020-03-09 11:23:18 · 271 阅读 · 0 评论 -
面试题 05.07 配对交换(java)(数位运算)
配对交换。编写程序,交换某个整数的奇数位和偶数位,尽量使用较少的指令(也就是说,位0与位1交换,位2与位3交换,以此类推)。 示例1: 输入:num = 2(或者0b10) 输出 1 (或者 0b01) 示例2: 输入:num = 3 输出:3 提示: num的范围在[0, 2^30 - 1]之间,不会发生整数溢出。 来源:力扣(LeetCode) 链接:https://leet...原创 2020-03-09 10:41:09 · 248 阅读 · 0 评论 -
面试题 05.03 翻转数位(java)
给定一个32位整数 num,你可以将一个数位从0变为1。请编写一个程序,找出你能够获得的最长的一串1的长度。 示例 1: 输入: num = 1775(110111011112) 输出: 8 示例 2: 输入: num = 7(01112) 输出: 4 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/reverse-bits-lcci...原创 2020-03-09 09:52:29 · 441 阅读 · 0 评论 -
※面试题 05.01 插入(java)(数位运算)
插入。给定两个32位的整数N与M,以及表示比特位置的i与j。编写一种方法,将M插入N,使得M从N的第j位开始,到第i位结束。假定从j位到i位足以容纳M,也即若M = 10 011,那么j和i之间至少可容纳5个位。例如,不可能出现j = 3和i = 2的情况,因为第3位和第2位之间放不下M。 示例1: 输入:N = 10000000000, M = 10011, i = 2, j = 6 输...原创 2020-03-08 21:28:37 · 213 阅读 · 0 评论 -
面试题 03.01 三合一(java)
三合一。描述如何只用一个数组来实现三个栈。 你应该实现push(stackNum, value)、pop(stackNum)、isEmpty(stackNum)、peek(stackNum)方法。stackNum表示栈下标,value表示压入的值。 构造函数会传入一个stackSize参数,代表每个栈的大小。 示例1: 输入: ["TripleInOne", "push", "push"...原创 2020-03-08 09:38:19 · 244 阅读 · 0 评论 -
面试题 02.06 回文链表(java)
编写一个函数,检查输入的链表是否是回文的。 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 进阶: 你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题? 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/palindrome...原创 2020-03-07 09:43:36 · 208 阅读 · 0 评论 -
面试题 01.09 字符串轮转(java)
字符串轮转。给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成(比如,waterbottle是erbottlewat旋转后的字符串)。 示例1: 输入:s1 = "waterbottle", s2 = "erbottlewat" 输出:True 示例2: 输入:s1 = "aa", "aba" 输出:False 提示: 字符串长度在[0, 100000]范围内。 说明:...原创 2020-03-05 21:14:21 · 220 阅读 · 0 评论 -
面试题 01.04 回文排列(java)
给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。 回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。 回文串不一定是字典当中的单词。 示例1: 输入:"tactcoa" 输出:true(排列有"tacocat"、"atcocta",等等) 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/palin...原创 2020-03-05 19:22:58 · 266 阅读 · 0 评论 -
※面试题51 数组中的逆序对(java)(超级难题)(归并排序,分治思想)
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。 示例 1: 输入: [7,5,6,4] 输出: 5 限制: 0 <= 数组长度 <= 50000 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/shu-zu-zhong-de-ni-x...原创 2020-03-04 15:05:09 · 168 阅读 · 0 评论 -
※面试题37 序列化二叉树(java)(二叉树转数组,数组转二叉树)
请实现两个函数,分别用来序列化和反序列化二叉树。 示例: 你可以将以下二叉树: 1 / \ 2 3 / \ 4 5 序列化为 "[1,2,3,null,null,4,5]" 注意:本题与主站 297 题相同:https://leetcode-cn.com/problems/serialize-and-deserialize-binar...原创 2020-03-03 16:35:16 · 507 阅读 · 1 评论 -
※面试题36 二叉搜索树与双向链表(java)(中序遍历,二叉线索化)
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。 为了让您更好地理解问题,以下面的二叉搜索树为例: 我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。 下图展示了上面的二叉搜索树转化成的...原创 2020-03-03 11:30:57 · 167 阅读 · 0 评论 -
面试题 10.01 合并排序的数组(java)
给定两个排序后的数组 A 和 B,其中 A 的末端有足够的缓冲空间容纳 B。 编写一个方法,将 B 合并入 A 并排序。 初始化 A 和 B 的元素数量分别为 m 和 n。 示例: 输入: A = [1,2,3,0,0,0], m = 3 B = [2,5,6], n = 3 输出: [1,2,2,3,5,6] 来源:力扣(LeetCode) 链...原创 2020-03-03 10:55:08 · 177 阅读 · 0 评论