![](https://img-blog.csdnimg.cn/6238e6c58a2149bfa1f6f07637d8bd82.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
ICPC、洛谷、LeetCode、蓝桥杯
文章平均质量分 60
算法
QuantumYou
ALWAYS CONTINUE,NEVER BREAK.
展开
-
LeetCode 108. 将有序数组转换为二叉搜索树 (BST 与中序遍历)
文章目录题目题解代码题目给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。输入:nums = [-10,-3,0,5,9]输出:[0,-3,9,-10,null,5]注意: 答案不唯一题解利用性质:BST(二叉搜索树)的中序遍历是升序的因此本题等同于根据中序遍历的序列恢复二叉搜索树。因此我们可以以升序序列中的任一个元素作为根节点原创 2021-09-16 20:50:32 · 192 阅读 · 0 评论 -
LeetCode 1823. 找出游戏的获胜者 (约瑟夫环问题)
文章目录题目题解代码题目共有 n 名小伙伴一起做游戏。小伙伴们围成一圈,按 顺时针顺序 从 1 到 n 编号。确切地说,从第 i 名小伙伴顺时针移动一位会到达第 (i+1) 名小伙伴的位置,其中 1 <= i < n ,从第 n 名小伙伴顺时针移动一位会回到第 1 名小伙伴的位置。游戏遵循如下规则:从第 1 名小伙伴所在位置 开始 。沿着顺时针方向数 k 名小伙伴,计数时需要 包含 起始时的那位小伙伴。逐个绕圈进行计数,一些小伙伴可能会被数过不止一次。你数到的最后一名小伙伴需要原创 2021-09-16 19:51:52 · 399 阅读 · 0 评论 -
LeetCode 1249. 移除无效的括号 (栈)
文章目录题目题解代码题目给你一个由 '('、')' 和小写字母组成的字符串 s。你需要从字符串中删除最少数目的 '(' 或者 ')' (可以删除任意位置的括号),使得剩下的「括号字符串」有效。请返回任意一个合法字符串。有效「括号字符串」应当符合以下 任意一条 要求:空字符串或只包含小写字母的字符串可以被写作 AB(A 连接 B)的字符串,其中 A 和 B 都是有效「括号字符串」可以被写作 (A) 的字符串,其中 A 是一个有效的「括号字符串」示例 1:输入:s =原创 2021-09-16 19:27:59 · 188 阅读 · 0 评论 -
LeetCode 155. 最小栈 (借助辅组栈)
文章目录题目题解代码题目设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。示例:输入:["MinStack","push","push","push","getMin","pop","top","getMin"][[],[-2],[0],[-3],[],[],[],[]]输出:[null,n原创 2021-09-14 09:10:49 · 172 阅读 · 0 评论 -
LeetCode 143. 重排链表 (寻找链表中点 + 链表逆序 + 合并链表)
文章目录题目题解代码题目给定一个单链表 L 的头节点 head ,单链表 L 表示为:L0 → L1 → … → Ln-1 → Ln请将其重新排列后变为:L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → …不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。题解寻找链表中点 + 链表逆序 + 合并链表通过观察给到的示例,其结果是将原链表的前半部分和原链表的后半部分反转之后的链表进行合并得到的。因此,整体思路就是:首先,找到链表的中间节点,原创 2021-09-13 15:48:19 · 205 阅读 · 0 评论 -
LeetCode 24. 两两交换链表中的节点
文章目录题目题解解法一 递归解法二 迭代题目给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。输入:head = [1,2,3,4]输出:[2,1,4,3]题解解法一 递归用head表示原始链表的头节点,新的链表的第二个节点,用 newhead表示新的链表的头节点,原始链表的第二个节点,则原始链表中的其余节点的头节点是 newhead.next。令head.next=swappairs( newhead.nex原创 2021-09-13 09:31:26 · 174 阅读 · 0 评论 -
LeetCode 82. 删除排序链表中的重复元素 II
当你足够努力 幸运总会与你不期而遇文章目录题目题解解法一 递归解法二 一次遍历Tips : 递归与迭代的区别题目存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。返回同样按升序排列的结果链表。示例 1:输入:head = [1,2,3,3,4,4,5]输出:[1,2,5]题解解法一 递归如果head.val==head.next.val,说明头节点的值等于下ー个节点的值,所以.原创 2021-09-12 14:26:12 · 152 阅读 · 0 评论 -
LeetCode 160. 相交链表 (哈希 双指针)
文章目录题目题解解法一 哈希表解法二 双指针题目给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。图示两个链表在节点 c1 开始相交:题目数据 保证 整个链式结构中不存在环。注意,函数返回结果后,链表必须 保持其原始结构 。题解一般链表类型题目, 双指针,哈希表解法一 哈希表首先遍历链表 headA ,并将其每个值存于哈希中,然后遍历 haedB,判断该节点是否在哈希集合中原创 2021-09-11 21:11:49 · 198 阅读 · 0 评论 -
LeetCode 142. 环形链表 II (哈希表 快慢指针) (精华)
文章目录题目题解解法一:哈希表解法二: 快慢指针题目给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。进阶:你是否可以使用 O(1) 空间解决此题?实例1:输入:head = [3,2,0,-4], pos = 1原创 2021-09-09 19:20:31 · 175 阅读 · 0 评论 -
LeetCode 2. 两数相加 (暴力模拟)
题目给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例 1:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.题解暴力模拟代码package leetcodePlan.Base;public class P0002原创 2021-09-08 21:23:59 · 197 阅读 · 1 评论 -
LeetCode 5. 最长回文子串 (动态规划)
文章目录题目题解动态规划代码题目给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。 题解动态规划如果我们已经知道 bab那么 ababa 一定是回文串,这是因为它的首尾两个字母都是 a我们用 P(i,j) 表示字符串 s 的第 i 到 j 个字母组成的串(下文表示成 s[i:j])是否为回文串:动态规划递推式:这里的「其它情况」包含两种可能性:那么我们就可以写出动态规划的状态转原创 2021-09-08 20:56:10 · 174 阅读 · 0 评论 -
LeetCode 187. 重复的DNA序列 (滑动窗口结合哈希)
题目所有 DNA 都由一系列缩写为 ‘A’,‘C’,‘G’ 和 ‘T’ 的核苷酸组成,例如:“ACGAATTCCG”。在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。编写一个函数来找出所有目标子串,目标子串的长度为 10,且在 DNA 字符串 s 中出现次数超过一次。示例 1:输入:s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"输出:["AAAAACCCCC","CCCCCAAAAA"]题解沿长度为 N的字符串移动长度为 L原创 2021-09-07 10:29:08 · 210 阅读 · 0 评论 -
LeetCode 49. 字母异位词分组 (排序 + 哈希)
文章目录题目题解代码题目给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母都恰好只用一次。示例 1:输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]输出: [["bat"],["nat","tan"],["ate","eat","tea"]]题解利用哈希表 ,遍历元素及其个数相同解法一: 排序 + 哈希两原创 2021-09-06 10:57:56 · 155 阅读 · 0 评论 -
LeetCode 763. 划分字母区间 (好题再消化)
文章目录题目题解代码题目字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。示例:输入:S = "ababcbacadefegdehijhklij"输出:[9,7,8]解释:划分结果为 "ababcbaca", "defegde", "hijhklij"。每个字母最多出现在一个片段中。像 "ababcbacadefegde", "hijhklij" 的划分是错误的,因为划分的片段数较少。 题解原创 2021-09-05 20:47:03 · 333 阅读 · 0 评论 -
LeetCode 290. 单词规律 (利用哈希表的特性)
文章目录题目题解代码题目给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。示例1:输入: pattern = "abba", str = "dog cat cat dog"输出: true题解Java 哈希表的特性 map.put() 如果在原先的哈希表中存在此数,返回次数的个数。如果不存在则返回 null原创 2021-09-05 19:08:05 · 215 阅读 · 0 评论 -
LeetCode 415. 字符串相加 (暴力模拟 手算)
文章目录题目题解题目给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。提示:num1 和num2 的长度都小于 5100num1 和num2 都只包含数字 0-9num1 和num2 都不包含任何前导零你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式题解设置进位 carry ,双指针依次相加注意最后依次进位。package leetcodePlan.Base;public class P0415 {原创 2021-09-05 16:12:13 · 178 阅读 · 0 评论 -
LeetCodee 560. 和为K的子数组 (前缀 后缀)
解题快如CPU , 记忆牢如RROM文章目录题目题解代码题目给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。题解数组问题擅用 前缀和 后缀和解法一: 暴力枚举,时间复杂度太高解法二:利用前缀和 + 哈希表V getOrDefault(Object key, V defaultValue) 返回到指定键所.原创 2021-09-05 15:42:52 · 160 阅读 · 0 评论 -
LeetCode 238. 除自身以外数组的乘积
文章目录题目题解题目给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。示例:输入: [1,2,3,4]输出: [24,12,8,6]题解解法一:当然使用除法,简洁高效解法二:利用乘积 = 左边乘积(前缀) * 右边乘积 (后缀)分界线 int [] res = new int[nums.length] ; int k = 1 ; for原创 2021-09-04 20:58:06 · 156 阅读 · 0 评论 -
LeetCode 334. 递增的三元子序列 (多变量 动态规划)
文章目录题目题解题目给你一个整数数组 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 的三元组都满足题意示例 2:输入:nums = [5,4,3,2原创 2021-09-04 20:23:07 · 295 阅读 · 0 评论 -
LeetCode 48. 旋转图像
文章目录题目题解解法一(暴力枚举)解法二(交换法)题目给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[[7,4,1],[8,5,2],[9,6,3]]题解解法一(暴力枚举)注意:与题目的输入格式不一样 public static voi原创 2021-09-02 16:43:14 · 162 阅读 · 0 评论 -
LeetCode 119. 杨辉三角 II (动态规划 递归)
Always continue; Never break ;文章目录题目题解杨辉三角的性质解法一(动态规划)解法二(递推)题目给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。示例 1:输入: rowIndex = 3输出: [1,3,3,1]题解杨辉三角的性质解法一(动态规划)根据杨辉三角形后一行与前一行的关系。如下图,外层循环从上往下一层层求,复用一维数组 res(滚动.原创 2021-09-02 16:13:52 · 250 阅读 · 0 评论 -
LeetCode 706. 设计哈希映射 (Hash 底层探究实现)
尽人力,敬天命题目不使用任何内建的哈希表库设计一个哈希映射(HashMap)。实现 MyHashMap 类:MyHashMap() 用空映射初始化对象void put(int key, int value) 向 HashMap 插入一个键值对 (key, value) 。如果 key 已经存在于映射中,则更新其对应的值 value 。int get(int key) 返回特定的 key 所映射的 value ;如果映射中不包含 key 的映射,返回 -1 。void remov.原创 2021-09-02 11:01:00 · 242 阅读 · 0 评论 -
LeetCode 56. 合并区间 (贪心算法)
半岛铁盒题目以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。示例 1:输入:intervals = [[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].题解解法一(排序比较法)暴力模拟首.原创 2021-09-01 21:00:49 · 193 阅读 · 0 评论 -
LeetCode 15. 三数之和 (关于多数之和问题)
加油!当自己的实力不能满足自己的目标时,就静下心去学习!文章目录题目题解解法一(哈希表)解法二(三指针)总结多数之和问题(两数、三数、四数等)题目给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]题解解法一(.原创 2021-09-01 16:14:08 · 201 阅读 · 0 评论 -
LeetCode 169. 多数元素 (哈希表)
文章目录题目题解解法一 (哈希法)解法二 (排序法)解法三(摩尔投票)题目给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入:[3,2,3]输出:3示例 2:输入:[2,2,1,1,1,2,2]输出:2题解解法一 (哈希法)使用哈希映射(HashMap)来存储每个元素以及出现的次数。对于哈希映射中的每个键值对,键表示一个元素,值表示该原创 2021-08-31 15:30:28 · 309 阅读 · 0 评论 -
LeetCode 136. 只出现一次的数字 (异或)
文章目录题目题解题目给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。示例 1:输入: [2,2,1]输出: 1题解采用集合的方法(遍历集合如果没有则添加,有则删除该元素)采用散列表的方法(遍历数组,添加到散列表,然后遍历散列表,只出现一次即为所求)采用异或运算,结合异或运算的结合律 (异或的规则位 相同为0,相异为1)package leetcodePlan;public class P0136 { public s原创 2021-08-30 16:58:44 · 146 阅读 · 0 评论 -
LeetCode 190. 颠倒二进制位 (位运算 分治)
文章目录题目题解解法一(位运算)解法二 (回文数)解法三 (分治法)解法四(接口法)题目颠倒给定的 32 位无符号整数的二进制位。提示:请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的 示例 2 中,输入表示有符号整数 -3,输出表示有符号整数 -107374182原创 2021-08-30 16:37:25 · 648 阅读 · 0 评论 -
LeetCode 231. 2 的幂 & 191. 位1的个数 (位运算)
文章目录题目A题解代码题目B题解代码题目A给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。示例 1:输入:n = 1输出:true解释:2^0 = 1示例 2:输入:n = 16输出:true解释:2^4 = 16题解参考链接一个数 n 是 2 的幂(注意不是偶数),当且仅当 n 是正整数,并且 n 的二进制表示中仅包含 1 个原创 2021-08-29 15:34:29 · 152 阅读 · 0 评论 -
LeetCode 120. 三角形最小路径和 (动态规划)
所有热爱的事情都要不遗余力题目给定一个三角形 triangle ,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 i 或 i + 1示例 1:输入:triangle = [[2],[3,4],[6,5,7],[4,1,8,3]]输出:11解释:如下面简图所示: 2 3 4 6 .原创 2021-08-29 11:42:56 · 171 阅读 · 0 评论 -
LeetCode 198. 打家劫舍 (动态规划 + 滚动数组)
一研为定,万山无阻文章目录题目题解题目你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高.原创 2021-08-29 10:42:09 · 153 阅读 · 0 评论 -
LeetCode P70 爬楼梯 (动规、滚动、递归 三大解法)
一研为定,万山无阻题目假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶题解解法一:这题为典型的动态规.原创 2021-08-28 22:09:19 · 208 阅读 · 0 评论 -
LeetCode 784. 字母大小写全排列
重铸国一荣光,省二义不容辞文章目录题目题解代码题目给定一个字符串S,通过将字符串S中的每个字母转变大小写,我们可以获得一个新的字符串。返回所有可能得到的字符串集合。示例1:输入:S = "a1b2"输出:["a1b2", "a1B2", "A1b2", "A1B2"]示例2:输入:S = "3z4"输出:["3z4", "3Z4"]示例3:输入:S = "12345"输出:["12345"]题解采取深度优先算法,DFS 遍历Java Character..原创 2021-08-28 20:17:52 · 170 阅读 · 0 评论 -
LeetCode 46. 全排列 (回溯法详解)
重铸国一荣光,省二义不容辞文章目录题目题解代码排列区分顺序,组合不区分顺序题目给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。示例 1:输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2:输入:nums = [0,1]输出:[[0,1],[1,0]]示例 3:输入:nums = [1]输出:[[1]]题解参考链接.原创 2021-08-28 16:19:19 · 469 阅读 · 0 评论 -
LeetCode 77. 组合(剪枝策略的运用)
文章目录剪枝算法概述题目题解实现思路剪枝算法概述基本概念 : 在搜索算法中优化中,剪枝,就是通过某种判断,避免一些不必要的遍历过程,形象的说,就是剪去了搜索树中的某些“枝条”,故称剪枝。应用剪枝优化的核心问题是设计剪枝判断方法,即确定哪些枝条应当舍弃,哪些枝条应当保留的方法。剪枝的三个原则:正确、准确、高效剪枝的两种思路:可行性剪枝及最优性剪枝剪枝算法按照其判断思路可大致分成两类 : 可行性剪枝及最优性剪枝 .剪枝策略 : 属于算法优化范畴;通常应用在DFS 和 BFS 搜索算法中;剪枝策略就原创 2021-08-28 11:22:57 · 791 阅读 · 0 评论 -
LeetCode 206. 反转链表
文章目录题目题目给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。示例 1:输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]原创 2021-08-26 13:41:37 · 166 阅读 · 0 评论 -
LeetCode 21. 合并两个有序链表 ( 归并 )
文章目录题目题解实现思路代码实现题目将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]题解实现思路解法一:常规解法,运用迭代,当 L1 和 L2 都不是空链表时,判断 L1 和 L2 哪一个链表的头节点的值更小,将较小值的节点添加到结果里,当一个节点被添加到结果里之后,将对应链表中的节点向后移一位。解法二:运用递归,递归定义合并操作原创 2021-08-26 09:01:00 · 258 阅读 · 0 评论 -
LeetCode 994. 腐烂的橘子 (BFS)
文章目录题目题解代码题目在给定的网格中,每个单元格可以有以下三个值之一:值 0 代表空单元格;值 1 代表新鲜橘子;值 2 代表腐烂的橘子。每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂。返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1。示例 1:输入:[[2,1,1],[1,1,0],[0,1,1]]输出:4示例 2:输入:[[2,1,1],[0,1,1],[1,0,1]]输出:-1解释:左下角的橘子(原创 2021-08-25 16:56:45 · 213 阅读 · 0 评论 -
LeetCode 542. 01 矩阵 (广度优先、动态规划)
文章目录题目题解题目给定一个由 0 和 1 组成的矩阵 mat ,请输出一个大小相同的矩阵,其中每一个格子是 mat 中对应位置元素到最近的 0 的距离。两个相邻元素间的距离为 1 。示例 1:输入:mat = [[0,0,0],[0,1,0],[0,0,0]]输出:[[0,0,0],[0,1,0],[0,0,0]]示例 2:输入:mat = [[0,0,0],[0,1,0],[1,1,1]]输出:[[0,0,0],[0,1,0],[1,2,1]]题解解法一:采用原创 2021-08-25 11:16:39 · 281 阅读 · 0 评论 -
LeetCode 567. 字符串的排列 (滑动窗口 好题)
文章目录题目题解代码题目给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。换句话说,s1 的排列之一是 s2 的 子串 。示例 1:输入:s1 = "ab" s2 = "eidbaooo"输出:true解释:s2 包含 s1 的排列之一 ("ba").示例 2:输入:s1= "ab" s2 = "eidboaoo"输出:false题解关键在于当两个字符串每个字符的个数均相等时,一个字符串才是另一个字符串的排列。根据这一特点,利用滑动原创 2021-08-24 14:33:44 · 177 阅读 · 0 评论 -
LeetCode 16. 填充每个节点的下一个右侧节点指针
文章目录题目题解代码题目给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node { int val; Node *left; Node *right; Node *next;}= 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。进阶:你只能使用常量级额外空间。使用递归解题也符合原创 2021-08-24 14:25:23 · 146 阅读 · 0 评论