LeetCode题解
wardseptember
https://wardseptember.gitee.io/mynotes/#/
展开
-
栈和队列面试题总结
文章目录用栈实现队列解法用队列实现栈解法最小栈解法剑指 Offer 59 - II. 队列的最大值解法有效的括号解法每日温度解法下一个更大元素 II解法剑指 Offer 59 - I. 滑动窗口的最大值双端队列推荐阅读用栈实现队列232. 用栈实现队列使用栈实现队列的下列操作:push(x) -- 将一个元素放入队列的尾部。pop() -- 从队列首部移除元素。peek() -- 返回队列首部的元素。empty() -- 返回队列是否为空。 示例:MyQueue queue = ne原创 2020-11-30 13:08:32 · 352 阅读 · 0 评论 -
链表面试题总结
文章目录剑指 Offer 06. 从尾到头打印链表利用栈逆向输入数组剑指 Offer 24. 反转链表迭代解法递归解法剑指 Offer 18. 删除链表的节点解法删除排序链表中的重复元素解法1解法2递归删除链表的倒数第N个节点解法剑指 Offer 22. 链表中倒数第k个节点快慢指针剑指 Offer 35. 复杂链表的复制解法剑指 Offer 52. 两个链表的第一个公共节点解法合并两个有序链表非递归解法递归解法两两交换链表中的节点解法两数相加 II解法回文链表解法解法2分隔链表解法奇偶链表解法1解法2推荐原创 2020-11-29 16:17:45 · 419 阅读 · 0 评论 -
数组面试题总结
文章目录剑指 Offer 03. 数组中重复的数字解法剑指 Offer 53 - I. 在排序数组中查找数字 I解法二分查找另一种写法剑指 Offer 53 - II. 0~n-1中缺失的数字解法等差数列二分法移动零解法1解法2最大连续1的个数解法剑指 Offer 04. 二维数组中的查找解法有序矩阵中第K小的元素二分查找法堆排序剑指 Offer 29. 顺时针打印矩阵解法重塑矩阵解法错误的集合解法寻找重复数双指针优美的排列 II解法数组的度解法托普利茨矩阵解法数组嵌套解法最多能完成排序的块解法剑指 Of原创 2020-11-28 19:54:55 · 371 阅读 · 0 评论 -
字符串面试题总结(终极版)
文章目录有效的字母异位词解法最长回文串解法同构字符串解法回文子串解法回文数解法计数二进制子串解法剑指 Offer 58 - I. 翻转单词顺序解法剑指 Offer 58 - II. 左旋转字符串解法剑指 Offer 67. 把字符串转换成整数解法有效的字母异位词242. 有效的字母异位词给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例 1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat原创 2020-11-24 17:41:12 · 2561 阅读 · 0 评论 -
二叉树面试题刷题模板[终极版]
文章目录递归树结构二叉树的最大深度后序递归二叉树最小深度后序递归二叉树的直径后序递归平衡二叉树后序递归小总结对称的二叉树递归解法二叉树的镜像后序递归树的子结构递归解法二叉搜索树的最近公共祖先前序递归二叉树的最近公共祖先前序递归二叉搜索树的第k大节点中序递归二叉树中和为某一值的路径前序递归538. 把二叉搜索树转换为累加树类中序递归669. 修剪二叉搜索树前序递归找树左下角的值前序递归遍历左叶子之和递归遍历最长同值路径后序递归二叉树中第二小的节点递归遍历572. 另一个树的子树前序递归合并二叉树前序递归路径总原创 2020-11-18 22:00:26 · 589 阅读 · 0 评论 -
LeetCode题解——随机刷题(四)
文章目录448. 找到所有数组中消失的数字解法438. 找到字符串中所有字母异位词滑动窗口581. 最短无序连续子数组遍历560. 和为K的子数组前缀和+哈希表919. 会议室 II排序621. 任务调度器排序推荐阅读448. 找到所有数组中消失的数字448. 找到所有数组中消失的数字给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。您能在不使用额外空间且时间复原创 2020-09-17 14:32:37 · 337 阅读 · 0 评论 -
LeetCode题解——随机刷题(二)
文章目录114. 二叉树展开为链表寻找前驱节点221. 最大正方形动态规划301. 删除无效的括号回溯算法312. 戳气球动态规划399. 除法求值并查集推荐阅读114. 二叉树展开为链表114. 二叉树展开为链表给定一个二叉树,原地将它展开为一个单链表。 例如,给定二叉树 1 / \ 2 5 / \ \3 4 6将其展开为:1 \ 2 \ 3 \ 4 \ 5原创 2020-09-14 22:35:00 · 285 阅读 · 0 评论 -
LeetCode题解——随机刷题(三)
文章目录48. 旋转图像解法49. 字母异位词分组解法56. 合并区间排序85. 最大矩形单调栈96. 不同的二叉搜索树解法推荐阅读48. 旋转图像48. 旋转图像给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。示例 1:给定 matrix = [ [1,2,3], [4,5,6], [7,8,9]],原地旋转输入矩阵,原创 2020-09-04 19:18:19 · 283 阅读 · 0 评论 -
LeetCode题解——随机刷题(一)
文章目录146. LRU缓存机制哈希表和双向链表152. 乘积最大子数组动态规划2. 两数相加直接遍历4. 寻找两个正序数组的中位数解法5. 最长回文子串双指针11. 盛最多水的容器双指针15. 三数之和双指针推荐阅读146. LRU缓存机制146. LRU缓存机制运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果关键字 (key) 存在于缓存中,则获取关键字的值(总是正数原创 2020-08-24 15:57:11 · 507 阅读 · 0 评论 -
LeetCode题解——位运算
文章目录基本原理汉明距离解法只出现一次的数字解法缺失数字解法只出现一次的数字 III解法颠倒二进制位解法不用额外变量交换两个整数2的幂解法4的幂解法交替位二进制数解法数字的补数解法两整数之和解法最大单词长度乘积解法比特位计数解法推荐阅读基本原理0s 表示一串 0,1s 表示一串 1。x ^ 0s = x x & 0s = 0 x | 0s = xx ^ 1s = ~x x & 1s = x x | 1s = 1sx ^ x = 0原创 2020-07-12 12:37:58 · 345 阅读 · 0 评论 -
LeetCode题解——图
文章目录二分图判断二分图解法拓扑排序课程表解法课程表 II解法并查集冗余连接解法推荐阅读二分图判断二分图力扣链接给定一个无向图graph,当这个图为二分图时返回true。如果我们能将一个图的节点集合分割成两个独立的子集A和B,并使图中的每一条边的两个节点一个来自A集合,一个来自B集合,我们就将这个图称为二分图。graph将会以邻接表方式给出,graph[i]表示图中与节点i相连的所有节点。每个节点都是一个在0到graph.length-1之间的整数。这图中没有自环和平行边: graph原创 2020-07-09 14:19:47 · 676 阅读 · 0 评论 -
LeetCode题解——数组(二)
文章目录优美的排列 II解法数组的度解法托普利茨矩阵解法数组嵌套解法最多能完成排序的块解法推荐阅读优美的排列 II给定两个整数 n 和 k,你需要实现一个数组,这个数组包含从 1 到 n 的 n 个不同整数,同时满足以下条件:① 如果这个数组是 [a1, a2, a3, ... , an] ,那么数组 [|a1 - a2|, |a2 - a3|, |a3 - a4|, ... , |an-1 - an|] 中应原创 2020-07-08 22:15:56 · 491 阅读 · 0 评论 -
LeetCode题解——数组(一)
文章目录移动零解法重塑矩阵解法最大连续1的个数解法搜索二维矩阵 II解法有序矩阵中第K小的元素二分查找法堆排序错误的集合解法寻找重复数双指针推荐阅读移动零给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。解法class Solution { public void moveZeroes(int[] num原创 2020-07-07 17:19:14 · 1338 阅读 · 0 评论 -
LeetCode题解——字符串
文章目录有效的字母异位词解法最长回文串解法同构字符串解法回文子串解法回文数解法计数二进制子串解法推荐阅读有效的字母异位词给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例 1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: false说明:你可以假设字符串只包含小写字母。进阶:如果输入字符串包含 unicode 字符怎么办?你能否调整你的原创 2020-06-19 14:06:56 · 348 阅读 · 0 评论 -
LeetCode题解——哈希表
文章目录哈希表两数之和HashMap解法存在重复元素解法最长和谐子序列解法最长连续序列解法推荐阅读哈希表两数之和给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]HashMap解法c原创 2020-06-18 14:08:40 · 218 阅读 · 0 评论 -
LeetCode题解——栈和队列
文章目录用栈实现队列解法用队列实现栈解法最小栈解法有效的括号解法每日温度解法下一个更大元素 II解法推荐阅读用栈实现队列使用栈实现队列的下列操作:push(x) -- 将一个元素放入队列的尾部。pop() -- 从队列首部移除元素。peek() -- 返回队列首部的元素。empty() -- 返回队列是否为空。 示例:MyQueue queue = new MyQueue();queue.push(1);queue.push(2); queue.peek(); /原创 2020-06-17 16:21:19 · 326 阅读 · 0 评论 -
LeetCode题解——树(四)
文章目录BST将有序数组转换为二叉搜索树递归有序链表转换二叉搜索树递归中序遍历两数之和 IV - 输入 BST中序遍历二叉搜索树的最小绝对差中序遍历中序遍历优化二叉搜索树中的众数中序遍历Morris中序遍历实现 Trie (前缀树)解法键值映射解法推荐阅读BST将有序数组转换为二叉搜索树将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9原创 2020-06-12 11:23:35 · 373 阅读 · 0 评论 -
LeetCode题解——树(三)
文章目录前中后序遍历二叉树的前序遍历迭代二叉树的后序遍历迭代解法1迭代解法2二叉树的中序遍历迭代解法BST修剪二叉搜索树递归算法二叉搜索树中第K小的元素中序遍历递归解法把二叉搜索树转换为累加树递归解法二叉搜索树的最近公共祖先递归解法二叉树的最近公共祖先递归解法推荐阅读前中后序遍历二叉树的前序遍历给定一个二叉树,返回它的 前序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3]进阶: 原创 2020-06-09 13:11:29 · 256 阅读 · 0 评论 -
LeetCode题解——树(二)
文章目录递归二叉树的最小深度递归解法对称二叉树递归解法迭代解法左叶子之和递归解法最长同值路径递归解法打家劫舍 III递归解法动态规划二叉树中第二小的节点递归解法层序遍历二叉树的层平均值层序遍历DFS找树左下角的值层序遍历DFS推荐阅读递归二叉树的最小深度给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \原创 2020-06-06 17:29:41 · 273 阅读 · 2 评论 -
LeetCode题解——树(一)
文章目录递归二叉树的最大深度递归解法非递归解法平衡二叉树解法二叉树的直径解法翻转二叉树递归解法合并二叉树递归解法路径总和递归解法路径总和 III解法另一个树的子树递归解法推荐阅读递归二叉树的最大深度给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。原创 2020-06-05 13:45:16 · 1645 阅读 · 0 评论 -
LeetCode题解——链表
文章目录相交链表解法反转链表递归解法头插法合并两个有序链表非递归解法递归解法删除排序链表中的重复元素解法1解法2递归删除链表的倒数第N个节点解法两两交换链表中的节点解法两数相加 II解法回文链表解法分隔链表解法奇偶链表解法推荐阅读相交链表编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:解法/** * Definition for singly-linked list. * public class ListNode { * int val; * List原创 2020-06-02 23:48:09 · 334 阅读 · 0 评论 -
LeetCode题解——数学问题(二)
文章目录七进制数数字转换为十六进制数Excel表列名称阶乘后的零解法推荐阅读七进制数给定一个整数,将其转化为7进制,并以字符串形式输出。示例 1:输入: 100输出: “202”示例 2:输入: -7输出: “-10”class Solution { public String convertToBase7(int num) { if (num == 0) { return "0"; } StringBuild原创 2020-05-29 18:08:32 · 314 阅读 · 0 评论 -
LeetCode题解——数学问题(一)
文章目录计算质数最大公约数最小公倍数二进制求和字符串相加最少移动次数使数组元素相等 II先排序再计算快速选择找到中位数多数元素排序找中间那个数Boyer-Moore Majority Vote Algorithm有效的完全平方数3的幂直接法除自身以外数组的乘积三个数的最大乘积推荐阅读计算质数统计所有小于非负整数 n 的质数的数量。示例:输入: 10输出: 4解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。class Solution { public int原创 2020-05-17 23:12:33 · 760 阅读 · 0 评论 -
LeetCode题解——动态规划(五)
更多学习笔记Github文章目录更多学习笔记[Github](https://wardseptember.github.io/notes/#/)股票交易类型309. 最佳买卖股票时机含冷冻期动态规划714. 买卖股票的最佳时机含手续费动态规划123. 买卖股票的最佳时机 III动态规划188. 买卖股票的最佳时机 IV动态规划字符串编辑583. 两个字符串的删除操作动态规划72. 编辑距离动态规...原创 2020-04-03 18:38:35 · 367 阅读 · 0 评论 -
LeetCode题解——动态规划(四)
文章目录474. 一和零动态规划322. 零钱兑换动态规划518. 零钱兑换 II动态规划139. 单词拆分动态规划377. 组合总和 Ⅳ动态规划推荐阅读474. 一和零在计算机界中,我们总是追求用有限的资源获取最大的收益。现在,假设你分别支配着 m 个 0 和 n 个 1。另外,还有一个仅包含 0 和 1 字符串的数组。你的任务是使用给定的 m 个 0 和 n 个 1 ,找到能拼出存在于...原创 2020-03-04 22:01:13 · 572 阅读 · 0 评论 -
LeetCode题解——动态规划(三)
文章目录300. 最长上升子序列动态规划二分查找646. 最长数对链动态规划376. 摆动序列动态规划1143. 最长公共子序列动态规划416. 分割等和子集动态规划494. 目标和动态规划推荐阅读300. 最长上升子序列给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,10...原创 2020-02-29 23:29:14 · 436 阅读 · 0 评论 -
LeetCode题解——动态规划(二)
文章目录303. 区域和检索 - 数组不可变缓存413. 等差数列划分常数内存的动态规划343. 整数拆分动态规划279. 完全平方数BFS动态规划91. 解码方法动态规划推荐阅读303. 区域和检索 - 数组不可变给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点。示例:给定 nums = [-2, 0, 3, -5, 2...原创 2020-02-18 18:06:32 · 356 阅读 · 0 评论 -
LeetCode题解——动态规划(一)
文章目录70. 爬楼梯动态规划198. 打家劫舍动态规划1动态规划2213. 打家劫舍 II动态规划64. 最小路径和动态规划62. 不同路径动态规划推荐阅读70. 爬楼梯假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。...原创 2020-01-04 15:26:49 · 239 阅读 · 0 评论 -
LeetCode题解--回溯算法(四)
131. 分割回文串给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回 s 所有可能的分割方案。示例:输入: “aab”输出:[[“aa”,“b”],[“a”,“a”,“b”]]回溯算法class Solution { private boolean checkPalindrome(String s, int begin, int end) { ...原创 2019-12-17 15:10:59 · 278 阅读 · 0 评论 -
LeetCode题解--回溯算法(三)
40. 组合总和 II给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。说明:所有数字(包括目标数)都是正整数。解集不能包含重复的组合。示例 1:输入: candidates = [10,1,2,7,6,1,5], target = 8,...原创 2019-12-16 23:51:56 · 267 阅读 · 0 评论 -
LeetCode题解--回溯算法(二)
文章目录46. 全排列回溯算法47. 全排列 II回溯算法77. 组合回溯算法回溯剪枝操作39. 组合总和回溯算法46. 全排列给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]回溯算法class Solution { priv...原创 2019-12-08 19:44:24 · 194 阅读 · 0 评论 -
LeetCode题解--回溯算法(一)
17. 电话号码的字母组合给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:“23”输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。回溯算法c...原创 2019-12-07 19:50:22 · 264 阅读 · 0 评论 -
LeetCode题解——深度优先搜索(三)
文章目录547. 朋友圈DFSBFS并查集130. 被围绕的区域DFS417. 太平洋大西洋水流问题DFS547. 朋友圈班上有 N 名学生。其中有些人是朋友,有些则不是。他们的友谊具有是传递性。如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友。所谓的朋友圈,是指所有朋友的集合。给定一个 N * N 的矩阵 M,表示班级中学生之间的朋友关系。如果M[i...原创 2019-12-05 08:52:58 · 204 阅读 · 0 评论 -
LeetCode题解——深度优先搜索(一)
695. 岛屿的最大面积给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合。你可以假设二维矩阵的四个边缘都被水包围着。找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为0。)示例 1:[[0,0,1,0,0,0,0,1,0,0,0,0...原创 2019-11-13 15:31:05 · 232 阅读 · 0 评论 -
LeetCode题解——广度优先搜索(二)
127. 单词接龙给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如下规则:每次转换只能改变一个字母。转换过程中的中间单词必须是字典中的单词。说明:如果不存在这样的转换序列,返回 0。所有单词具有相同的长度。所有单词只由小写字母组成。字典中不存在重复的单词...原创 2019-11-09 23:01:03 · 276 阅读 · 0 评论 -
LeetCode题解——广度优先搜索(BFS)
75. 颜色分类给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]进阶:一个直观的解决方案是使用...原创 2019-11-05 19:57:08 · 292 阅读 · 0 评论 -
LeetCode题解——排序
215. 数组中的第K个最大元素在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。直接排...原创 2019-10-31 23:25:51 · 233 阅读 · 0 评论 -
LeetCode题解——双指针(二)
88. 合并两个有序数组给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = ...原创 2019-10-19 14:55:36 · 212 阅读 · 0 评论 -
LeetCode题解——双指针(一)
167. 两数之和 II - 输入有序数组给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。说明:返回的下标值(index1 和 index2)不是从零开始的。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例...原创 2019-10-18 22:46:04 · 260 阅读 · 0 评论 -
LeetCode题解——分治算法
241. 为运算表达式设计优先级给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果。你需要给出所有可能的组合的结果。有效的运算符号包含 +, - 以及 * 。示例 1:输入: "2-1-1"输出: [0, 2]解释: ((2-1)-1) = 0 (2-(1-1)) = 2示例 2:输...原创 2019-10-16 17:20:00 · 393 阅读 · 0 评论