
LeetCode编程题笔记
文章平均质量分 86
以LeetCode为主,涉及newCode等平台的在线编程题目练习,思路分享
镰刀韭菜
视野,意志,品格;目标,坚持,实践
展开
-
【每日一题】1994.好子集的数目
给你一个整数数组 nums。如果 nums 的一个子集中,所有元素的乘积可以表示为一个或多个 互不相同的质数 的乘积,那么我们称它为 好子集。原创 2023-05-07 23:30:00 · 723 阅读 · 0 评论 -
【每日一题】969. 煎饼排序
给你一个整数数组 arr,请使用 煎饼翻转 完成对数组的排序。原创 2023-05-06 23:30:00 · 742 阅读 · 0 评论 -
【每日一题】在二叉树中找到两个节点的最近公共祖先
深度优先搜索一般用于树或者图的遍历,其他有分支的(如二维矩阵)也适用。它的原理是从初始点开始,一直沿着同一个分支遍历,直到该分支结束,然后回溯到上一级继续沿着一个分支走到底,如此往复,直到所有的节点都有被访问到。...原创 2022-07-13 16:57:06 · 630 阅读 · 0 评论 -
【每日一题】判断是不是平衡二叉树
平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。原创 2022-07-12 17:16:59 · 323 阅读 · 0 评论 -
【每日一题】判断是不是完全二叉树
对完全二叉树最重要的定义就是**叶子节点只能出现在最下层和次下层**,所以我们想到可以**使用队列辅助进行层次遍历**——从上到下遍历所有层,每层从左到右,只有次下层和最下层才有叶子节点,其他层出现叶子节点就意味着不是完全二叉树。...原创 2022-07-12 12:11:34 · 478 阅读 · 0 评论 -
【每日一题】二叉搜索树与双向链表
知识点1:二叉树递归递归是一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。因此递归过程,最重要的就是查看能不能讲原本的问题分解为更小的子问题,这是使用递归的关键。而二叉树的递归,则是将某个节点的左子树、右子树看成一颗完整的树,那么对于子树的访问或者操作就是对于原树的访问或者操作的子问题,因此可以自我调用函数不断进入子树。知识点2:二叉搜索树二叉搜索树是一种特殊的二叉树,**它的每个节点值大于它的左子节点,且原创 2022-07-11 19:27:17 · 269 阅读 · 0 评论 -
【每日一题】1414. 和为 K 的最少斐波那契数字数目
贪心策略, 斐波那契数列原创 2022-02-03 01:23:29 · 959 阅读 · 0 评论 -
【每日一题】1763. 最长的美好子字符串
最长的美好子字符串:分治法+递归原创 2022-02-03 00:33:43 · 301 阅读 · 0 评论 -
【每日一题】Leetcode:1765.地图中的最高点
Leetcode 1765 地图中的最高点, 首先创建一个一样尺寸的矩阵,然后将其实位置入队,依次遍历队列中的元素,执行多源广度优先搜索原创 2022-01-30 08:30:00 · 968 阅读 · 0 评论 -
【每日一题】Leetcode: 1996. 游戏中弱角色的数量
Leetcode: 1996. 游戏中弱角色的数量 使用排序法, 固定一个属性排序,记录另一个属性的最值原创 2022-01-29 21:29:23 · 267 阅读 · 0 评论 -
【每日一题】Leetcode:2013.检测正方形
Leetcode 2013 检测正方形嵌套哈希表原创 2022-01-27 22:00:00 · 574 阅读 · 0 评论 -
【Leetcode】2045. 到达目的地的第二短时间
2045. 到达目的地的第二短时间:广度优先搜索,创建二维数据存储从每个节点出发所能达到的节点的最短路径和次短路径,然后根据公式计算到达目的地的第二短时间内容来源:Leetcode 2045.到达目的地的第二短时间转载 2022-01-26 22:00:00 · 186 阅读 · 0 评论 -
【Leetcode】99.恢复二叉搜索树——三种解法
99.恢复二叉搜索树题目描述解题思路解法1:显示中序遍历解法2:代码展示题目描述给定二叉搜索树的根节点root,该树种的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树。示例1输入:root = [1,3,null,null,2]输出:[3,1,null,null,2]解释:3 不能是 1 左孩子,因为 3 > 1 。交换 1 和 3 使二叉搜索树有效。示例2输入:root = [3,1,4,null,null,2]输出:[2,1,4,null,null,3]解释:原创 2022-01-27 00:00:00 · 1123 阅读 · 0 评论 -
【Leetcode】105. 从前序与中序遍历序列构造二叉树
105. 从前序与中序遍历序列构造二叉树题目描述解题思路代码展示题目描述给定一棵树的前序遍历 preorder 与中序遍历 inorder。请构造二叉树并返回其根节点。示例1Input: preorder = [3,9,20,15,7], inorder=[9,3,15,20,7]output:[3,9,20,null,null,15,7]示例2Input: preorder=[-1], inorder=[-1]output: [-1]提示1≤preorder.length≤3原创 2022-01-26 01:00:00 · 409 阅读 · 0 评论 -
【Leetcode】124. 二叉树中的最大路径和
Leetcode.124: 二叉树中的最大路径和题目描述解题过程代码展示题目描述路径被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中至多出现以此,该路径至少包含一个节点,且不一定经过根节点。路径和是路径中各节点值得总和。给你一个二叉树的根结点root,返回其最大路径和。示例1:输入:root = [1, 2, 3]输出:6解释:最优路径是2->1->3,路径和为2+1+3=6示例2输入:root = [-10,9,20转载 2022-01-25 01:30:00 · 2702 阅读 · 1 评论 -
【Leetcode】295. 数据流的中位数
295. 数据流的中位数题目描述解题思路题目描述中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。例如,[2,3,4] 的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。double findMedian() - 返回目前所有元素的中位数。来源:力扣(LeetCode)链接:https://leetcode-cn.原创 2021-10-08 19:00:00 · 296 阅读 · 0 评论 -
【荣耀2021编程题】薅羊毛
薅羊毛题目描述解题思路题目描述蓐羊毛活动:药店为了吸引顾客,每天举行多场老年人养生讲座,内场主题不同,开始时间,时长都可能不同,参加者入场时签名,散场时能获得一个红包,参加下一场的条件,下一场开始的时间大于等于上一场结束时间。王奶奶在家没事做,就像蓐羊毛,挣红包。针对几场讲座的通知,请你给王奶奶设计一个计划表,告诉她参加哪几场,让她挣的红包最多(只看红包个数)。注意:如果有多种结果收益相同,最终结果挑选结束时间早的那场数据,如果结束时间一样,选开始晚的。比如:(3,6)(1,5)(6.7)那原创 2021-10-05 22:35:23 · 1056 阅读 · 0 评论 -
【荣耀2021编程题】从全量数据中提取指定范围数据并打印
从全量数据中提取指定范围数据并打印题目描述题目解析题目描述某些数据库读写框架,为了提升性能,会控制每次读取的数据量,并支持从指定的位置开始读。请写代码,从标准输入获得全量数据,并从标准输入获取读取指令,包括开始读取的位置(从1开始),读取的数据量,并返回读取到的数据。每次返回数据不超过20个,如果读取指令中要求的数据量超过20个则分多次返回。如果读取指令中要求的数据量超过实际数据量,则按实际数据量处理。输入描述第一行:构造全量数据,空格分隔,数据是字符串形式第二行:读取指令,包括开始读取原创 2021-10-05 20:24:55 · 684 阅读 · 1 评论 -
【编程题】剪绳子问题
题目描述给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],…,k[m]。请问k[0]xk[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。输入描述:输入一个数n,意义见题面。(2 <= n <= 60)输出描述...原创 2021-09-14 13:52:01 · 234 阅读 · 0 评论 -
【Leetcode】797. 所有可能的路径
797. 所有可能的路径题目描述解题思路题目描述给你一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不要求按特定顺序)二维数组的第 i 个数组中的单元都表示有向图中 i 号节点所能到达的下一些节点,空就是没有下一个结点了。译者注:有向图是有方向的,即规定了 a→b 你就不能从 b→a 。来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/all-paths-from-source-to-targe原创 2021-08-25 20:29:51 · 621 阅读 · 0 评论 -
【Leetcode】443. 压缩字符串
443. 压缩字符串题目描述解题思路:双指针法题目描述给你一个字符数组 chars ,请使用下述算法压缩:从一个空字符串 s 开始。对于 chars 中的每组 连续重复字符 :如果这一组长度为 1 ,则将字符追加到 s 中。否则,需要向 s 追加字符,后跟这一组的长度。压缩后得到的字符串 s 不应该直接返回 ,需要转储到字符数组 chars 中。需要注意的是,如果组长度为 10 或 10 以上,则在 chars 数组中会被拆分为多个字符。请在 修改完输入数组后 ,返回该数组的新长度。你必原创 2021-08-24 00:57:05 · 246 阅读 · 0 评论 -
【Leetcode】789. 逃脱阻碍者
789. 逃脱阻碍者题目描述解题思路: 曼哈顿距离题目描述你在进行一个简化版的吃豆人游戏。你从 [0,0][0, 0][0,0] 点开始出发,你的目的地是 target=[xtarget,ytarget]target = [x_target, y_target]target=[xtarget,ytarget] 。地图上有一些阻碍者,以数组 ghostsghostsghosts 给出,第 iii 个阻碍者从 ghosts[i]=[xi,yi]ghosts[i] = [x_i, y_i]ghosts[i原创 2021-08-24 00:36:00 · 189 阅读 · 0 评论 -
【Leetcode】552. 学生出勤记录 II
552. 学生出勤记录 II题目描述解题思路题目描述可以用字符串表示一个学生的出勤记录,其中的每个字符用来标记当天的出勤情况(缺勤、迟到、到场)。记录中只含下面三种字符:‘A’:Absent,缺勤‘L’:Late,迟到‘P’:Present,到场如果学生能够 同时 满足下面两个条件,则可以获得出勤奖励:按 总出勤 计,学生缺勤(‘A’)严格 少于两天。学生 不会 存在 连续 3 天或 连续 3 天以上的迟到(‘L’)记录。给你一个整数 n ,表示出勤记录的长度(次数)。请你返回记录转载 2021-08-22 23:29:28 · 313 阅读 · 0 评论 -
【Leetcode】576. 出界的路径数
576. 出界的路径数题目描述解题思路题目描述给你一个大小为 m x n 的网格和一个球。球的起始坐标为 [startRow, startColumn] 。你可以将球移到在四个方向上相邻的单元格内(可以穿过网格边界到达网格之外)。你 最多 可以移动 maxMove 次球。给你五个整数 m、n、maxMove、startRow 以及 startColumn ,找出并返回可以将球移出边界的路径数量。因为答案可能非常大,返回对 109+710^9 + 7109+7 取余 后的结果。来源:力扣(LeetCo原创 2021-08-15 23:38:55 · 232 阅读 · 0 评论 -
【Leetcode】516. 最长回文子序列
516. 最长回文子序列题目描述解题思路:动态规划题目描述给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-palindromic-subsequence示例1输入:s = "bbbab"输出:4解释:一个可能的最长回文子序列为 "bbbb" 。示例2输入:s = "原创 2021-08-12 11:14:24 · 393 阅读 · 0 评论 -
【Leetcode】446. 等差数列划分 II - 子序列
446. 等差数列划分 II - 子序列题目描述解题思路:动态规划+哈希表题目描述给你一个整数数组 nums ,返回 nums 中所有 等差子序列 的数目。如果一个序列中 至少有三个元素 ,并且任意两个相邻元素之差相同,则称该序列为等差序列。例如,[1, 3, 5, 7, 9]、[7, 7, 7, 7] 和 [3, -1, -5, -9] 都是等差序列。再例如,[1, 1, 2, 5, 7] 不是等差序列。数组中的子序列是从数组中删除一些元素(也可能不删除)得到的一个序列。例如,[2,5,10] 是原创 2021-08-11 23:48:38 · 455 阅读 · 0 评论 -
【Leetcode】992. K 个不同整数的子数组
992. K 个不同整数的子数组题目描述解题思路题目描述给定一个正整数数组 A,如果 A 的某个子数组中不同整数的个数恰好为 K,则称 A 的这个连续、不一定不同的子数组为好子数组。(例如,[1,2,3,1,2] 中有 3 个不同的整数:1,2,以及 3。)返回 A 中好子数组的数目。来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/subarrays-with-k-different-integers示例1输入:A = [1,2,1,2,3]原创 2021-08-11 10:05:08 · 317 阅读 · 0 评论 -
【Leetcode】646. 最长数对链
646. 最长数对链题目描述解题思路题目描述给出 n 个数对。 在每一个数对中,第一个数字总是比第二个数字小。现在,我们定义一种跟随关系,当且仅当 b < c 时,数对(c, d) 才可以跟在 (a, b) 后面。我们用这种形式来构造一个数对链。给定一个数对集合,找出能够形成的最长数对链的长度。你不需要用到所有的数对,你可以以任何顺序选择其中的一些数对来构造。来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/maximum-length-o原创 2021-08-10 20:08:27 · 214 阅读 · 0 评论 -
【Leetcode】457. 环形数组是否存在循环
457. 环形数组是否存在循环题目描述解题思路方法1: 过程模拟方法2: 图遍历标记题目描述存在一个不含 0 的 环形 数组 nums ,每个 nums[i] 都表示位于下标 i 的角色应该向前或向后移动的下标个数:如果 nums[i] 是正数,向前 移动 nums[i] 步如果 nums[i] 是负数,向后 移动 nums[i] 步因为数组是 环形 的,所以可以假设从最后一个元素向前移动一步会到达第一个元素,而第一个元素向后移动一步会到达最后一个元素。数组中的 循环 由长度为 k 的下标序列原创 2021-08-07 14:00:12 · 269 阅读 · 0 评论 -
【Leetcode】847. 访问所有节点的最短路径
847. 访问所有节点的最短路径题目描述解题思路方法:状态压缩+广度优先搜索题目描述存在一个由 n 个节点组成的无向连通图,图中的节点按从 0 到 n - 1 编号。给你一个数组 graph 表示这个图。其中,graph[i] 是一个列表,由所有与节点 i 直接相连的节点组成。返回能够访问所有节点的最短路径的长度。你可以在任一节点开始和停止,也可以多次重访节点,并且可以重用边。来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/shortest-pa转载 2021-08-07 13:07:55 · 716 阅读 · 0 评论 -
【Leetcode】802. 找到最终的安全状态
802. 找到最终的安全状态题目描述解题思路题目描述在有向图中,以某个节点为起始节点,从该点出发,每一步沿着图中的一条有向边行走。如果到达的节点是终点(即它没有连出的有向边),则停止。对于一个起始节点,如果从该节点出发,无论每一步选择沿哪条有向边行走,最后必然在有限步内到达终点,则将该起始节点称作是 安全 的。返回一个由图中所有安全的起始节点组成的数组作为答案。答案数组中的元素应当按 升序 排列。该有向图有 n 个节点,按 0 到 n - 1 编号,其中 n 是 graph 的节点数。图以下述形式转载 2021-08-07 12:37:47 · 203 阅读 · 0 评论 -
【Leetcode】743. 网络延迟时间
743. 网络延迟时间题目描述解题思路:Dijkstra算法题目描述有 n 个网络节点,标记为 1 到 n。给你一个列表 times,表示信号经过 有向 边的传递时间。 times[i]=(ui,vi,wi)times[i] = (u_i, v_i, w_i)times[i]=(ui,vi,wi),其中 uiu_iui 是源节点,viv_ivi 是目标节点, wiw_iwi 是一个信号从源节点传递到目标节点的时间。现在,从某个节点 K 发出一个信号。需要多久才能使所有节点都收到信号?如果不原创 2021-08-06 20:52:44 · 377 阅读 · 0 评论 -
【Leetcode】987. 二叉树的垂序遍历
987. 二叉树的垂序遍历题目描述解题思路:自定义排序题目描述给你二叉树的根结点 root ,请你设计算法计算二叉树的 垂序遍历 序列。对位于 (row, col) 的每个结点而言,其左右子结点分别位于 (row + 1, col - 1) 和 (row + 1, col + 1) 。树的根结点位于 (0, 0) 。二叉树的 垂序遍历 从最左边的列开始直到最右边的列结束,按列索引每一列上的所有结点,形成一个按出现位置从上到下排序的有序列表。如果同行同列上有多个结点,则按结点的值从小到大进行排序。返回原创 2021-08-06 12:34:08 · 238 阅读 · 0 评论 -
【Leetcode】1104. 二叉树寻路
1104. 二叉树寻路题目描述解题思路方法1:模拟方法2:数学题目描述在一棵无限的二叉树上,每个节点都有两个子节点,树中的节点 逐行 依次按 “之” 字形进行标记。如下图所示,在奇数行(即,第一行、第三行、第五行……)中,按从左到右的顺序进行标记;而偶数行(即,第二行、第四行、第六行……)中,按从右到左的顺序进行标记。给你树上某一个节点的标号 label,请你返回从根节点到该标号为 label 节点的路径,该路径是由途经的节点标号所组成的。示例1输入:label = 14输出:[1,3,4,1原创 2021-08-06 11:50:06 · 191 阅读 · 0 评论 -
【Leetcode】1713. 得到子序列的最少操作次数
1713. 得到子序列的最少操作次数题目描述解题思路: 贪心法+二分查找题目描述给你一个数组 target ,包含若干 互不相同 的整数,以及另一个整数数组 arr ,arr 可能 包含重复元素。每一次操作中,你可以在 arr 的任意位置插入任一整数。比方说,如果 arr = [1,4,1,2] ,那么你可以在中间添加 3 得到 [1,4,3,1,2] 。你可以在数组最开始或最后面添加整数。请你返回 最少 操作次数,使得 target 成为 arr 的一个子序列。一个数组的 子序列 指的是删除原数原创 2021-08-05 20:08:37 · 263 阅读 · 0 评论 -
【Leetcode】138. 复制带随机指针的链表
Leetcode 138.复制带随机指针的链表题目描述解题思路方法1: 哈希表+回溯法方法2:迭代法+节点拆分题目描述给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指原创 2021-08-05 11:34:34 · 184 阅读 · 0 评论 -
【Leetcode】863. 二叉树中所有距离为 K 的结点
Leetcode 863.二叉树中所有距离为K的结点题目描述解题思路:深度优先搜索+哈希表题目描述给定一个二叉树(具有根结点 root), 一个目标结点 target ,和一个整数值 K 。返回到目标结点 target 距离为 K 的所有结点的值的列表。 答案可以以任何顺序返回。示例输入:root = [3,5,1,6,2,0,8,null,null,7,4], target = 5, K = 2输出:[7,4,1]解释:所求结点为与目标结点(值为 5)距离为 2 的结点,值分别为 7,4,原创 2021-07-29 13:34:48 · 237 阅读 · 0 评论 -
【Leetcode】218.天际线问题
Leetcode 218.天际线问题题目描述解题思路:扫描线+优先队列代码(Java)题目描述城市的天际线是从远处观看该城市中所有建筑物形成的轮廓的外部轮廓。给你所有建筑物的位置和高度,请返回由这些建筑物形成的天际线 。每个建筑物的几何信息由数组 buildings 表示,其中三元组 buildings[i] = [lefti, righti, heighti] 表示:leftileft_ilefti 是第 i 座建筑物左边缘的 x 坐标。rightiright_irighti 是第 i 座转载 2021-07-29 00:32:48 · 287 阅读 · 0 评论 -
【Leetcode】1818.绝对差值和
Leetcode 1818.绝对差值和题目描述解题思路题目描述给你两个正整数数组 nums1 和 nums2 ,数组的长度都是 n 。数组 nums1 和 nums2 的 绝对差值和 定义为所有 |nums1[i] - nums2[i]|(0 <= i < n)的 总和(下标从 0 开始)。你可以选用 nums1 中的 任意一个 元素来替换 nums1 中的 至多 一个元素,以 最小化 绝对差值和。在替换数组 nums1 中最多一个元素 之后 ,返回最小绝对差值和。因为答案可能很大,所以需原创 2021-07-16 01:47:46 · 324 阅读 · 1 评论 -
【Leetcode】1846.减小和重新排列数组后的最大元素
Leetcode 1846.减小和重新排列数组后的最大元素题目描述:解题思路题目描述:给你一个正整数数组 arr 。请你对 arr 执行一些操作(也可以不进行任何操作),使得数组满足以下条件:arr 中 第一个 元素必须为 1 。任意相邻两个元素的差的绝对值 小于等于 1 ,也就是说,对于任意的 1 <= i < arr.length (数组下标从 0 开始),都满足 abs(arr[i] - arr[i - 1]) <= 1 。abs(x) 为 x 的绝对值。你可以执行以下原创 2021-07-15 23:51:46 · 296 阅读 · 0 评论