随笔分类 - leetcode-题目分类
摘要:题目描述 给了一些点的连通关系,每个点的值都不同,每个点上都哟一个附加的标签(小写字母) 问:每个节点i的子树中标签和i相同的节点数 f1-无向图后序遍历 基本分析 怎么根据连接关系进行遍历?先建图 遍历的时候没有方向,怎么保证不会回去?加一个父节点的参数,保证不会往前走? 怎么维护当前节点的信息?
阅读全文
摘要:题目描述 给了一个数组,元素都是正的 给了数组分数的定义:子数组的和*数组长度 问分数严格小于k的非空子数组数目? f1-双指针 基本分析 能挖掘出啥性质?(1)数组都是正的,且另一个因子是长度相关,对每个右端点j,找到最远的左端点i时候,[i+1, j],[i+1,j]...[j, j]都是满足的
阅读全文
摘要:题目描述 给了一个矩阵grid,里面的数字有正有负 问从左上角到右下角的最大乘积? f1-dp 基本分析 这里有正又负会有啥问题?可能最小的负*负数会产生最大的正数,所以需要维护两个值,最大的路径积和最小的路径积 怎么进行转移?只能从左边或者上面转移来,需要对grid[i][j]的值按照正负分类讨论
阅读全文
摘要:题目描述 给了两个数组,可以把数组中相同的数组连起来,限制条件是连线不能相交 问最多能连多少根? f1-最长公共子序列 基本分析 为啥不能贪心?例如134和341,如果1一定要往后取,只能1,最好的结果是2 怎么变形?找到两个字符串的LCS,可以满足索引的限制要求 为啥在求LCS的时候会存在重复情况
阅读全文
摘要:题目描述 给了一个二叉树,给了不足节点的定义(所有经过该节点的从跟到叶子的路径和如果都小于limt) 需要删除所有的不足节点,返回最终的根节点 f1 分治+dfs 基本分析 从树上删除一个点,怎么操作方便?父节点删除比自己删除自己方便 以上信息给了什么启示?dfs中给父节点返回自己可以删除的信息,父
阅读全文
摘要:题目描述 给了一个二叉树,树上所有节点的值不同 再给了两个点的值表示起点和终点,问从起点到终点的最短路的方向? f1 dfs预处理+最近公共祖先 基本分析 没有给出起点和终点是哪个点,怎么拿到?一次从root的dfs s到e的最短路径是哪一条?从公共祖先分别下来的 怎么从s和e求到公共祖先的path
阅读全文
摘要:题目描述 给了n个项目,每个项目有不同的工作阶段。 限制是每周只能做一个阶段,相邻的两周不能看同一个项目 问最多能看多少周? f1-贪心 基本分析 最好的分配方式?最长的分为一类,其余一类,用其余的来分隔最长的 会有哪些情况?s > rest + 1和 s <= rest + 1的情况 代码 cla
阅读全文
摘要:题目描述 在一个数组中找出长度k的子序列,使其字典序最小? f1-单调栈 基本分析 字典序最小肯定是单调不减最好,但是怎么保证序列的长度是k?需要删除的个数是n-k,利用单调栈同时维护这个信息,超过了就不再维护有序性了。 stk中最终的结果有没有可能多于k?可能的,比如本身就是单调不减,会在stk中
阅读全文
摘要:题目描述 从数组中找一个连续子数字,对子数组升序的时候,数组就是升序的。 求最短的子数组的长度? f1排序+双指针 基本分析 如果排序后怎么找?左边第一个不等的点和右边第一个不等的点 代码 class Solution: def findUnsortedSubarray(self, nums: Li
阅读全文
摘要:题目描述 给一个数组nums,数组是循环的,求每个元素的下一个元素 f1-xxx 基本分析 循环数组的情况怎么考虑?拉直或者下标取余数 剩下怎么解决?常见的单调递减栈 代码 左到右 class Solution: def nextGreaterElements(self, nums: List[in
阅读全文
摘要:题目描述 nums2中元素都不同,num1是nums2的一个子集。 需要找出nums2中每个元素下一个更大的元素,在映射回nums1中? f1-哈希表+左到右的单调栈 基本分析 向右找最近的更大的值,维护递增栈还是递减的栈,是严格的吗?需要维护非严格递减的栈,例如43342,33都会入栈。 找到的逻
阅读全文
摘要:题目描述 给了一个字符串百奥是的非负整数num和整数k,问怎么移除其中的k个数字,让剩下的数字最小? f1-单调栈 基本分析 怎样的数字是最小的?单调递增排序的 带有约束k怎么考虑?只要栈非空+栈顶>d+ 还有k就能一直删 k没用完怎么办?字符是单调增的,从后往前删k次(k被维护过) 结果怎么得到?
阅读全文
摘要:题目描述 给了两个数组nums1和nums2,数组内元素由0-9构成,需要从两个数组中选出k个数字,并且每个数组中值数字的相对位置不能变,怎样才能组成的值最大? f1 单调栈 基本分析 能感觉到对每个数组需要维护一个递减栈,这是是两个数组的问题,怎么处理?每个数组维护一个 怎么能保证两个数组子序列合
阅读全文
摘要:题目描述 给了一个字符串s,需要删除重复的字符。 要求是(1)每个字母只保留一次;(2)结果的字典序最小 f1-贪心+单调栈 基本分析 如果给定一个s,只能删除一个,怎么删可以使字典序最小?从左到右删除第一个s[i]>s[i+1]的值,比如456651,删除第二个6;987,删除9。 结合上面的思路
阅读全文
摘要:题目描述 给了只包含0和1的矩阵,问只包含1的最大矩形的面积? f1-转化为逐列求面积+单调栈 基本分析 怎么优化暴力枚举的想法?对每一行,可以与处理出包括自己的左边最长的1的个数,写在left矩阵中 逐列的考虑以上数组,就是n个lc_84对应的问题,找以i列为第i列为底的最大矩形面积 代码 以列为
阅读全文
摘要:题目描述 给了一个数组表示柱子的高度,柱子的宽度是1,问能勾勒出的矩形的最大面积? f1-单调栈 基本分析 可能的最大矩形面积是咋算的?对某个位置i的高度h[i]来说,最大面积是向左找到最近的比他低的高度l[i], 向右找到最近的比他低的高度r[i], 宽度是r[i] - l[i]- 1 什么结构可
阅读全文
摘要:题目描述 柱子的宽度是1,高度存在数组中,问如果按照此排列,下雨后能接多少雨水 f1-单调栈 基本分析 要计算能存雨量,需要左边界的高度>=当前标高,需要用什么结构来维护?结构是单调的 又由于可能当前标高是逐渐递增考虑的,不是只计算一次,结构需要从右边添加或者右边弹出?栈 用单调栈怎么模拟计算的过程
阅读全文
摘要:题目描述 有n任务,有m工人,有p药丸,问最多能完成多少个任务? f1 二分+二分 基本分析 总的来说为啥是二分做?最多能完成的任务具有二段性,剩下需要处理的就是写check函数,看check(x)是不是成立 怎么是一个好的安排任务的策略?假设需要处理x个任务,那么选的人肯定是最强的ws[m- x:
阅读全文
摘要:题目描述 每次可以最多跳k步,最终落点是n-1。得分定义为路径上的nums[i]之和,问最大得分? f1-动态规划+单调队列 基本分析 怎么跳可以取到最大?考虑跳到j点的最大值是f[j], 必须从满足j-i<=k的点i转移过来,问题就是在满足要求的区间内,怎么取到最大的f[i]?单调队列 队头舍去什
阅读全文

浙公网安备 33010602011771号