
LeetCode
qq_34623223
这个作者很懒,什么都没留下…
展开
-
LeetCode刷题笔记 300(涉及到动态规划)
题目:最长上升子序列给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(n2) 。进阶: 你能将算法的时间复杂度降低到 O(nlogn) 吗?答案...原创 2020-03-04 15:55:01 · 149 阅读 · 0 评论 -
剑指Offer刷题笔记 37 / LeetCode刷题笔记 297 java实现
题目:序列化二叉树请实现两个函数,分别用来序列化和反序列化二叉树二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过某种符号表示空节点(#),结点的数值之间用一个特殊字符(如’,’)隔开。二叉树的反序列化是指:根据某种遍历...原创 2020-02-23 19:54:29 · 170 阅读 · 0 评论 -
LeetCode刷题笔记 295 / 剑指Offer 41(涉及到大小顶堆)
题目:数据流的中位数答案:参考链接:暴力法+二分查找+手动实现大小堆1.排序每次新进来一个数,都把它与已存的数进行排序。可以选择插入排序,将数字插入到已排好序的序列中,并保持整个序列的排序状态。可以通过二分搜索,查找到正确位置,然后将元素插入到正确位置。2.大顶堆+小顶堆维护两个堆:用于存储输入数字中较小一半的大顶堆 lo用于存储输入数字的较大一半的小顶堆 hi需要保证这 2...原创 2020-03-03 15:34:39 · 209 阅读 · 0 评论 -
LeetCode刷题笔记 287
题目:寻找重复数给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。示例 1:输入: [1,3,4,2,2]输出: 2示例 2:输入: [3,1,3,4,2]输出: 3说明:不能更改原数组(假设数组是只读的)。只能使用额外的 O(1) 的空间。时间复杂度小于 ...原创 2020-03-03 11:53:27 · 224 阅读 · 0 评论 -
LeetCode刷题笔记 283
题目:移动零给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。答案:参考链接:动画演示 移动零1.双指针 两次遍历从前往后遍历两次:第一次:用另一个指针j记录非零元素的个数,只要遇到非零的数字就赋值...原创 2020-03-02 14:05:15 · 101 阅读 · 0 评论 -
LeetCode刷题笔记 279(涉及到动态规划、BFS)
题目:完全平方数给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。示例 1:输入: n = 12输出: 3解释: 12 = 4 + 4 + 4.示例 2:输入: n = 13输出: 2解释: 13 = 4 + 9.答案:1.动态规划参考链接:完全平方数令dp[i]表示和为i的完全平方数的最...原创 2020-03-02 13:08:15 · 367 阅读 · 1 评论 -
LeetCode刷题笔记 74、240
题目:搜索二维矩阵I答案:二分法输入的 m x n 矩阵可以视为长度为 m x n的有序数组。row = idx / n , col = idx % n。class Solution { public boolean searchMatrix(int[][] matrix, int target) { int m = matrix.length; ...原创 2020-03-01 13:44:19 · 125 阅读 · 0 评论 -
LeetCode刷题笔记 239 / 剑指Offer 59(涉及到双端队列)
题目:滑动窗口最大值答案:参考链接:详细通俗的思路分析,多解法1.优先队列建立大顶堆,保证堆顶是最大值。每次移除元素时间复杂度O(k)class Solution { public int[] maxSlidingWindow(int[] nums, int k) { int n = nums.length; if (nums == null |...原创 2020-03-01 13:04:24 · 170 阅读 · 0 评论 -
LeetCode刷题笔记 238 / 剑指Offer 66
题目:除自身以外数组的乘积给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。示例:输入: [1,2,3,4]输出: [24,12,8,6]说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。进阶:你可以在常数空间复杂度内完成这个题目吗?( 出于对空...原创 2020-02-29 19:51:39 · 442 阅读 · 0 评论 -
LeetCode刷题笔记 236 / 剑指Offer 68
题目:二叉树的最近公共祖先答案:参考链接:JAVA DFS+剪枝递归我们使用DFS搜索每一个节点的左右子树:1、若子树上存在p和q的公共节点,返回此公共节点2、若不存在公共节点,但是存在p或q任意一个节点,返回此节点3、若不存在公共、p、q节点,则返回null。那么,有以下几个结论:1、若当前节点为null、p、q之一,直接返回当前节点2、若左子树上存在公共节点(返回值非p、...原创 2020-02-29 13:30:57 · 186 阅读 · 0 评论 -
LeetCode刷题笔记 234
题目:回文链表请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?答案:1.用快慢指针向后遍历,同时翻转链表的前半部分,然后与链表后半部分进行比较快指针走到最后时,慢指针走到中间节点,边走边翻转链表前半部分...原创 2020-02-27 19:02:11 · 96 阅读 · 0 评论 -
LeetCode刷题笔记 226 / 剑指Offer 27
题目:翻转二叉树翻转一棵二叉树。示例:输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1答案将二叉树所有的节点的左右孩子交换。相当于不管用什么方式,只要遍历所有节点,并把节点的左右孩子交换即可。1.递归class Solu...原创 2020-02-27 15:20:44 · 155 阅读 · 0 评论 -
LeetCode刷题笔记 221(涉及到动态规划)
题目:最大正方形在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。示例:输入:1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4答案:参考链接:最大正方形动态规划1.我们用 0 初始化另一个矩阵 dp,维数和原始矩阵维数相同;2.dp(i,j) 表示的是在左上角矩阵中由matrix[i-1][j-1]参与构...原创 2020-02-26 13:26:42 · 194 阅读 · 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 ≤ 数组的长度。答案:1...原创 2020-02-26 11:50:55 · 158 阅读 · 0 评论 -
LeetCode刷题笔记 208(涉及到前缀树)
题目:实现Trie(前缀树)实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。示例:Trie trie = new Trie();trie.insert(“apple”);trie.search(“apple”); // 返回 truetrie.search(“app”); // 返回 falsetrie.star...原创 2020-02-25 18:16:26 · 161 阅读 · 0 评论 -
LeetCode刷题笔记 207(涉及到拓扑排序)
题目:课程表答案:通过 拓扑排序 判断此课程安排图是否是 有向无环图(DAG)拓扑排序是对 DAG 的顶点进行排序,使得对每一条有向边 (u, v),均有 u(在排序记录中)比 v 先出现。首先明确思路:每一个顶点都有入度和出度,入度为0说明没有指向它的,那么就从它开始往下找。(1)将入度为0的顶点m(及其关联边)从图G中取出,则剩余的G’依然是有向无环图。(2)重新考量图G’,重复...原创 2020-02-25 12:08:35 · 169 阅读 · 0 评论 -
LeetCode刷题笔记 206
题目:反转链表反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL答案:1.迭代eg:1->2->3->4->5->NULL假设经过若干操作,我们已经把3之前的节点调整完毕,这些节点的next都指向前一个节点。接下来把3的next指...原创 2020-02-24 18:07:05 · 143 阅读 · 0 评论 -
LeetCode刷题笔记 200(涉及到深度优先、广度优先)
题目:岛屿数量给定一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。示例 1:输入:11110110101100000000输出: 1示例 2:输入:11000110000010000011输出: 3答案:参考链接:https://leet...原创 2020-02-24 15:24:40 · 247 阅读 · 0 评论 -
LeetCode刷题笔记 198(涉及到动态规划)
题目:打家劫舍答案动态规划f(k) = 从前 k 个房屋中能抢劫到的最大数额,Ai = 第 i 个房屋的钱数首先看 n = 1 的情况,显然 f(1) = A1再看 n = 2,f(2) = max(A1,A2)。,对于 n = 3,有两个选项:(1)抢第三个房子,将数额与第一个房子相加。(2)不抢第三个房子,保持现有最大数额。显然,你想选择数额更大的选项。于是,可以总结出公式...原创 2020-02-23 13:43:23 · 150 阅读 · 0 评论 -
LeetCode刷题笔记 169 / 剑指Offer 39(涉及到投票算法)
题目:求众数给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2答案:1.哈希表用哈希表来快速统计每个元素出现的次数。然后遍历哈希表,返回value大于n/2的key值...原创 2020-02-23 12:53:58 · 178 阅读 · 0 评论 -
LeetCode刷题笔记 160 / 剑指Offer 52
题目:相交链表编写一个程序,找到两个单链表相交的起始节点。答案:参考链接:https://leetcode-cn.com/problems/intersection-of-two-linked-lists/solution/xiang-jiao-lian-biao-by-leetcode/1.暴力法对链表A中的每一个结点 ai ,遍历整个链表 B 并检查链表 B 中是否存在结点和 a...原创 2020-02-23 12:26:40 · 188 阅读 · 0 评论 -
LeetCode刷题笔记 155
题目:最小栈计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) – 将元素 x 推入栈中。pop() – 删除栈顶的元素。top() – 获取栈顶元素。getMin() – 检索栈中的最小元素。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0)...原创 2020-02-22 13:26:02 · 152 阅读 · 0 评论 -
LeetCode刷题笔记 152
题目:乘积最大子序列给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。示例 1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。答案:动态规划和第53题很像,可以一起看。只不过乘积涉及到正负,就会...原创 2020-02-22 12:11:26 · 216 阅读 · 0 评论 -
LeetCode刷题笔记 148
题目:排序链表在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例 1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->5答案:1.归并排序(递归法)将待排序的序列划分为大小相等(或...原创 2020-02-21 22:05:07 · 104 阅读 · 0 评论 -
LeetCode刷题笔记 146(涉及到LinkedHashMap)
题目:LDR缓冲机制答案:参考链接:https://leetcode-cn.com/problems/lru-cache/solution/lru-ce-lue-xiang-jie-he-shi-xian-by-labuladong/使用哈希表+双向链表哈希表查找快,但是数据无固定顺序;链表有顺序之分,插入删除快,但是查找慢。所以结合一下,形成一种新的数据结构:哈希链表。定义链表头表示...原创 2020-02-21 11:56:03 · 225 阅读 · 0 评论 -
LeetCode刷题笔记 141、142(涉及到链表)
题目:环形链表答案:参考链接:https://leetcode-cn.com/problems/linked-list-cycle/solution/huan-xing-lian-biao-by-leetcode/1.哈希表遍历所有结点并在哈希表中存储每个结点的引用(或内存地址)。如果当前结点为空结点 null(即已检测到链表尾部的下一个结点),那么我们已经遍历完整个链表,并且该链表不是环...原创 2020-02-20 20:18:13 · 175 阅读 · 0 评论 -
LeetCode刷题笔记 139
题目:单词拆分答案:参考链接:https://leetcode-cn.com/problems/word-break/solution/dan-ci-chai-fen-by-leetcode/1.记忆化回溯法检查单词中的每一个前缀,如果在字典中出现过,那么去掉这个前缀后剩余的部分递归调用。public class Solution { public boolean wordBr...原创 2020-02-20 13:48:24 · 148 阅读 · 0 评论 -
LeetCode刷题笔记 138 / 剑指Offer 35
题目:复制带随机指针的链表给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的 深拷贝。我们用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, random_index] 表示:val:一个表示 Node.val 的整数。random_index:随机指针指向的节点索引(范围从 0 到 n-1);如果...原创 2020-02-19 19:03:57 · 158 阅读 · 0 评论 -
LeetCode刷题笔记 136
题目:只出现一次的数字给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4答案:1.列表操作如果列表中包含了该数字,则删除,不包含则加入,最后列表中只剩下一个数字即...原创 2020-02-19 12:41:39 · 102 阅读 · 0 评论 -
LeetCode刷题笔记 128
题目:最长连续序列给定一个未排序的整数数组,找出最长连续序列的长度。要求算法的时间复杂度为 O(n)。示例:输入: [100, 4, 200, 1, 3, 2]输出: 4解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。答案:1.排序将数组排序,再找连续序列的最大长度class Solution { public int longestConsecuti...原创 2020-02-18 14:57:48 · 93 阅读 · 0 评论 -
LeetCode刷题笔记 124
题目:二叉树中的最大路径和给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。示例 1:输入: [1,2,3] 1 / \ 2 3输出: 6示例 2:输入: [-10,9,20,null,null,15,7] -10 / \ ...原创 2020-02-18 13:08:02 · 126 阅读 · 0 评论 -
LeetCode刷题笔记 121 122 123 188
题目:买卖股票的最佳时机给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 ...原创 2020-02-17 19:16:58 · 155 阅读 · 0 评论 -
LeetCode刷题笔记 114(涉及到二叉树)
题目:二叉树展开为链表给定一个二叉树,原地将它展开为链表。例如,给定二叉树 1 / \ 2 5 / \ \3 4 6将其展开为:1 \ 2 \ 3 \ 4 \ 5 \ 6答案:1.展开为链表的顺序其实就是二叉树的先序遍历。(1)将原来...原创 2020-02-17 13:30:49 · 88 阅读 · 0 评论 -
LeetCode刷题笔记 105
题目:从前序与中序遍历序列构造二叉树根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7答案:递归先序遍历序列中,第一个结点必为根...原创 2020-02-16 13:59:27 · 331 阅读 · 0 评论 -
LeetCode刷题笔记 104 / 剑指Offer 55 - I(涉及到递归、层次遍历)
题目:二叉树的最大深度给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。答案:1.递归思路:树的深度等于1+最大的子树的深度clas...原创 2020-02-16 12:22:31 · 109 阅读 · 0 评论 -
LeetCode刷题笔记 102
题目:二叉树的层次遍历给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[[3],[9,20],[15,7]]答案:1.迭代将结点按层次依次放入队列结构中。当队列非空时:(...原创 2020-02-15 15:12:33 · 190 阅读 · 0 评论 -
LeetCode刷题笔记 101 / 剑指Offer 28
题目:对称二叉树给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3答案:参考链接:https://lee...原创 2020-02-15 12:56:03 · 206 阅读 · 0 评论 -
LeetCode刷题笔记 98(涉及到递归、二叉搜索树)
题目:验证二叉搜索树给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例1: 输入: 2 / \ 1 3 输出: true示例2: 输入: 5 / \ 1 4 /...原创 2020-02-14 17:38:18 · 420 阅读 · 0 评论 -
LeetCode刷题笔记 96
题目:不同的二叉搜索树给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?示例:输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 ...原创 2020-02-14 11:56:33 · 89 阅读 · 0 评论 -
LeetCode刷题笔记 94
题目:二叉树的中序遍历给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [1,3,2]进阶: 递归算法很简单,你可以通过迭代算法完成吗?答案:1.递归:/** * Definition for a binary tree node. * public class TreeNode {...原创 2020-02-13 14:51:31 · 107 阅读 · 0 评论