Leetcode题目笔记
文章平均质量分 63
Leetcode题目简洁笔记
NevarMovin
这个作者很懒,什么都没留下…
展开
-
Leetcode广度优先搜索笔记3 二进制矩阵中的最短路径
1091. 二进制矩阵中的最短路径:广度优先搜索解决矩阵中的路径寻找问题给你一个 n x n 的二进制矩阵 grid 中,返回矩阵中最短 畅通路径 的长度。如果不存在这样的路径,返回 -1 。二进制矩阵中的 畅通路径 是一条从 左上角 单元格(即,(0, 0))到 右下角 单元格(即,(n - 1, n - 1))的路径,该路径同时满足下述要求:·路径途经的所有单元格都的值都是 0 。·路径中所有相邻的单元格应当在 8 个方向之一 上连通(即,相邻两单元之间彼此不同且共享一条边或者一个角)。畅原创 2022-02-28 21:09:43 · 512 阅读 · 0 评论 -
Leetcode深度优先搜索笔记2 矩阵中的最长递增路径
329. 矩阵中的最长递增路径:记忆化深度优先搜索解决矩阵中的路径问题给定一个 m x n 整数矩阵 matrix ,找出其中 最长递增路径 的长度。对于每个单元格,你可以往上,下,左,右四个方向移动。 你 不能 在 对角线 方向上移动或移动到 边界外(即不允许环绕)。示例 1:输入:matrix = [[9,9,4],[6,6,8],[2,1,1]]输出:4解释:最长递增路径为 [1, 2, 6, 9]。示例 2:输入:matrix = [[3,4,5],[3,原创 2022-02-10 20:48:53 · 683 阅读 · 0 评论 -
Leetcode广度优先搜索笔记2 腐烂的橘子
994. 腐烂的橘子:带有变量控制的矩阵中的广度优先搜索在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一:值0代表空单元格; 值1代表新鲜橘子; 值2代表腐烂的橘子。每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。返回 直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1 。示例 1:输入:grid = [[2,1,1],[1,1,0],[0,1,1]]输出:4示例 2:输入:grid = [[2,...原创 2022-02-01 16:50:36 · 733 阅读 · 0 评论 -
Leetcode深度优先搜索笔记1 岛屿的最大面积
695. 岛屿的最大面积:深度优先搜索解决矩阵中的搜索问题给你一个大小为 m x n 的二进制矩阵 grid 。岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。岛屿的面积是岛上值为 1 的单元格的数目。计算并返回 grid 中最大的岛屿面积。如果没有岛屿,则返回面积为 0 。示例 1:输入:grid = [[0,0,1,0,0,0,0,1,0,0,0原创 2022-01-30 15:41:51 · 218 阅读 · 0 评论 -
Leetcode广度优先搜索笔记1 地图中的最高点
1765. 地图中的最高点:广度优先搜索解决带有一定条件的矩阵数值设置问题给你一个大小为m x n的整数矩阵isWater,它代表了一个由 陆地和 水域单元格组成的地图。如果isWater[i][j] == 0,格子(i, j)是一个 陆地格子。 如果isWater[i][j] == 1,格子(i, j)是一个 水域格子。你需要按照如下规则给每个单元格安排高度:每个格子的高度都必须是非负的。 如果一个格子是 水域,那么它的高度必须为 0。 任意相邻的格...原创 2022-01-29 20:43:42 · 127 阅读 · 0 评论 -
Leetcode优先队列/堆笔记1 数据流中的中位数
剑指 Offer 41. 数据流中的中位数、295. 数据流的中位数:使用自动排序的优先队列寻找数据流的中位数如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。例如,[2,3,4] 的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:·void addNum(int num) - 从数据流中添加原创 2022-01-27 10:56:11 · 138 阅读 · 0 评论 -
Leetcode回溯笔记2 矩阵中的路径+单词搜索
原创 2022-01-24 09:38:37 · 439 阅读 · 0 评论 -
Leetcode动态规划笔记4 整数拆分
整数拆分、I. 剪绳子:拆分整数使得到的数字乘积最大给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。(给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n 都是整数,n>1 并且 m>1),每段绳子的长度记为 k[0], k[1]... k[m-1]。请问 k[0]*k[1]*...*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是 8 时,我们把它剪成长度分别为 2、3、3 的三段,此时得到的最大乘积是18。原创 2022-01-13 20:54:37 · 242 阅读 · 0 评论 -
Leetcode链表题目笔记3 链表求和
面试题 02.05. 链表求和:以链表的形式完成两个数字的求和,并以链表的形式输出给定两个用链表表示的整数,每个节点包含一个数位。这些数位是反向存放的,也就是个位排在链表首部。编写函数对这两个整数求和,并用链表形式返回结果。示例:输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295输出:2 -> 1 -> 9,即912进阶:思考一下,假设这些数位是正向存放的,又该如何解决呢?示例:输入:(6 ->原创 2021-12-07 16:32:36 · 599 阅读 · 0 评论 -
Leetcode动态规划笔记3 丑数 II
丑数 II:动态规划在数字问题中的应用给你一个整数 n ,请你找出并返回第 n 个 丑数 。丑数 就是只包含质因数 2、3 和/或 5 的正整数。示例 1:输入:n = 10输出:12解释:[1, 2, 3, 4, 5, 6, 8, 9, 10, 12] 是由前 10 个丑数组成的序列。示例 2输入:n = 1输出:1解释:1 通常被视为丑数。动态规划解法:丑数只包含质因数 2、3、5,每一个丑数由之前的丑数乘 2 或 3 或 5 得到,因此适用于动态规划原创 2022-01-05 11:44:54 · 588 阅读 · 0 评论 -
Leetcode二叉树题目笔记1 二叉树镜像与对称
二叉树的镜像(翻转二叉树)、二叉树的镜像:输出二叉树的镜像(翻转二叉树)、通过判断原二叉树与其镜像是否相同判断二叉树是否对称二叉树的镜像(翻转二叉树):输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1首先,使用递归方法,从根节点开始对树进行遍历,交换每个结点的左右子节点,即可得到二叉树的镜像,即翻转二叉树:class .原创 2021-12-06 11:37:33 · 566 阅读 · 0 评论 -
Leetcode贪心笔记1 递增的三元子序列
递增的三元子序列:暴力搜索超时的情况下使用贪心算法一次遍历得到结果给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。示例 1:输入:nums = [1,2,3,4,5]输出:true解释:任何 i < j < k 的三元组都满足题意示例原创 2022-01-12 09:31:54 · 3452 阅读 · 0 评论 -
Leetcode链表题目笔记2 合并两个排序的链表
合并两个排序的链表:合并有序链表输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4对于两个递增链表的合并,使用双指针遍历两个链表,根据两个链表中各结点的val大小关系确定结点的添加顺序,同时将遍历两个链表的指针(可以直接使用其头指针)向后移动,直到指针的指向为空。依然使用虚拟头节点dummyHead,再定义pre指针作为遍历结原创 2021-12-05 20:33:28 · 335 阅读 · 0 评论 -
Leetcode链表题目笔记1 删除链表结点
删除链表的节点:根据给定数值,删除链表中对应的结点。给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。示例:输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为5的第二个节点,那么在调用了你的函数之后,该链表应变为 4 ->1 -> 9.若直接使用head结点进行遍历,则需要对头节点值为给定val情况作特殊处理(可以直接将头节点向后移动1位)。使用虚拟头结点dummy...原创 2021-12-05 20:22:19 · 149 阅读 · 0 评论 -
Leetcode二叉树题目笔记2 最近公共祖先
二叉树的最近公共祖先、二叉搜索树的最近公共祖先:找出给定两个指定节点的最近公共祖先236.二叉树的最近公共祖先:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”示例 1:输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出:3解.原创 2021-12-16 21:52:47 · 112 阅读 · 0 评论 -
Leetcode动态规划笔记1 三角形最小路径和
三角形最小路径和:经典的动态规划题目给定一个三角形 triangle ,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 i 或 i + 1 。示例 1:输入:triangle = [[2],[3,4],[6,5,7],[4,1,8,3]]输出:11解释:如下面简图所示: 2 3 46 5...原创 2021-12-19 21:22:03 · 291 阅读 · 0 评论 -
Leetcode动态规划笔记2 乘积最大子数组
乘积最大子数组:动态规划与其空间复杂度优化给你一个整数数组nums,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。示例 1:输入: [2,3,-2,4]输出: 6解释:子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释:结果不能为 2, 因为 [-2,-1] 不是子数组。动态规划解法:找到符合条件的(乘积最大)连续子数组,容易想到使用 dp 数组存储nums 数组...原创 2021-12-22 15:59:47 · 401 阅读 · 0 评论 -
Leetcode回溯笔记1 括号生成
括号生成:使用回溯方法比暴力解法复杂度更低数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例 1:输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]示例 2:输入:n = 1输出:["()"]回溯解法:首先定义返回结果变量的 result、当前处理的字符串 current。使用 backtracking 函数完成对所有情况的遍历,函数中传递存放结果的 r原创 2021-12-23 20:29:01 · 3475 阅读 · 0 评论 -
Leetcode栈题目笔记1 最小栈
最小栈、包含min函数的栈:设计支持在常数时间内检索到最小元素的栈设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop()—— 删除栈顶的元素。top()—— 获取栈顶元素。getMin() —— 检索栈中的最小元素。示例:输入:["MinStack","push","push","push","getMin","pop","top","getMin"][[],[-2],[0],[-3],[]..原创 2021-12-10 11:47:38 · 495 阅读 · 0 评论