04 2023 档案
摘要:题目描述 给了一个单子数组words 给了字母前身的定义:A在任何地方加一个字符,凑成B,A就是B的前身 问从words中怎么选,能构成最长的词链? f1-记忆化搜索 基本分析 怎么找到子问题?假如s是词链的最后一个单词,那么枚举去掉s某位后的构成新的词s-1,s-1就是s的更小一级的子问题 dfs
阅读全文
摘要:题目描述 矩阵中有两个岛屿 问岛之间的最小距离? f1- bsf + bfs 基本分析 怎么求第一个岛的所有点?找到第一个1后bfs 怎么保证不重复添加?入队的点设置为-1 怎么求到第二个岛的最小距离?第一个岛的所有点入队,遍历一轮step+1,遇到1的时候返回step 代码 class Solut
阅读全文
摘要:题目描述 给了一个只包含0和1的字符串 现在有俩操作能选(1)把00换成10;(2)把10换成01 问怎么操作能得到最大的字符串? f1-找规律+贪心 基本分析 为啥会有10换成01的操作?1010-1001-1101,把第一个0后面的1都挪到最后面,变成多个1+多个0+多个1的组合。然后把多个1按
阅读全文
摘要:题目描述 给了列表异或和的定义 现在的列表是arr1和arr2构造出来的,元素对是arr[i] and arr[j] 问以上列表的异或和? f1-依次确定答案的每一位 基本分析 为什么考虑计算答案的每一位?表达式只包含位运算(按位与 和按位异或) 具体怎么计算?要知道答案的第k为是1还是0->分别计
阅读全文
摘要:题目描述 一个盒子有四种属性,能否打开、糖果数、钥匙、内含盒子 给你初始盒子的索引,问能拿到多少糖果? f1-模拟 + bfs 基本分析 一个索引需要有哪些状态?能不能打开;是不是有了这个盒子;这个盒子打开过没有? 怎么定义这些状态?数组 bfs的规则? (1)最初入队?如果盒子能打开,把盒子入队(
阅读全文
摘要:题目描述 n个顶点构成了无向树 顶点编号从1到n 给了跳跃规则(1)跳相临边(2)不往回跳(3)多个选择概率相同(4)叶子结点时候就停下来 问t秒后跳到目标顶点target上的概率? f1-dfs 基本分析 怎么保证不往回跳?dfs时候传入父节点参数 dfs怎么定义?当前在x,父节点是fa,步数是s
阅读全文
摘要:题目描述 给一个整数数组 问怎么选数字,可以让能得到的结果最大,同时这个接结果需要是3的倍数? f1 分类讨论+ 贪心 基本分析 怎么判断能不能被3整除?和 % 3 == 0 怎么判断该从数组中删掉哪些数字?(1)和%3==1, 删最小的余1的数字,不行删俩最小的余2的数字;(2)和% 3 == 2
阅读全文
摘要:题目描述 给了一个正整数k,表示长度是k的所有回文数字 再给了和很多q,问第q小的数字是多少? f1 数学关系+构造 基本分析 从q之间的相互关系考虑还是单独考虑某个q和结果的关系?后者 长度是k的回文数字有啥特性?前一半数字是固定的,half = k + 1 >> 2, str[num][:hal
阅读全文
摘要:题目描述 给了一个字符串,只有* 和 | ,分别表示盘子和蜡烛 再给了很多查询,对某个查询[x, y],问在区间内的且在蜡烛之间的盘子的个数? f1-预处理+前缀和 基本分析 1个字符多个查询可以考虑什么?预处理 对每个查询x,y需要知道什么?索引>=x的最近的盘子位置;索引<=y的最近的盘子的位置
阅读全文
摘要:题目描述 给了一个二维矩阵,矩阵的元素不是0就是1 你可以进行任意次操作,让某行或者某列进行翻转 元素的得分是每一行二进制的和 问怎么操作可以让总得分最大? f1 贪心+计算增量 基本分析 为啥可以贪心?(1)对每行来说,首位肯定是1最好,遮掩某些行需要翻转,某些不翻;(2)对同一列来说,大家的优先
阅读全文
摘要:题目描述 给了一个数组,数组值是0<=x<=1的小数 再给了一个值ext,ext可以让以上每个位小数的分子和分母都+1 为怎么分配ext,可以让总和 / 个数最大? f1-优先队列 基本分析 可以看出是优先队列,队头需要怎么取?考虑增量,每次将1加在哪个分数中会有最大的增量? 怎么实现以上思想?因为
阅读全文
摘要:题目描述 给一个整数数组nums和整数x 需要从数组的左边或者右边删除元素,然后用x减去删除的元素 问如果x刚好成删到0,怎么删最短? f1-反向思考+双指针 基本分析 反向思考?找一个最长的子数组满足和= sum(nums) - x 为啥可以双指针?(1)元素都是整数,序列和是单调的;(2)元素连
阅读全文
摘要:题目描述 给一个数组,再给一个值的范围[l, r], 问最大值在[l, r]之间的子数组有多少个? f1-双指针 基本分析 如果枚举子数组的右端点i,会有几种情况?(1)arr[i] > right; (left <= arr[i] <= right; (3)arr[i] < left 假如枚举到右
阅读全文
摘要:题目描述 数字华容道,只有6个数字 问把0换到最后最少需要多少步? f1-构建状态表示的mask + bfs 基本分析 bfs的时候,当前状态怎么表示?把矩阵拉平,变成字符串 怎么快速可以得到某个字符串可以变成哪些字符串?(1)怎么快速知道不同情况下0周围的索引?枚举余处理(2)怎么知道不同mask
阅读全文
摘要:题目描述 给一个二维矩阵,里面的元素不是0就是1 可以通过翻转完成0-1变换,翻转的限制是周围相邻的点也要跟着变 问最终反转成全0的形式的最小次数? f1-状态压缩+bfs 基本分析 看大最少翻转次数可以联想到什么?bfs 直接bfs有啥问题?(1)矩阵的形式怎么存?通过状态压缩将二维转化为1维度
阅读全文
摘要:题目描述 给一个数组arr,起点是0,终点是n-1 有3种选择:可以退一步、进一步、跳到值相等的位置 问跳到终点的最少操作次数? f1 哈希表+bfs 基本分析 为什么是bfs?求从起点到终点的最短路 图是什么?当前节点到前、后、等值可跳的索引 怎么获取x到所有等值点索引y的映射关系?哈希表预处理
阅读全文
摘要:题目描述 给了一些点的连通关系,每个点的值都不同,每个点上都哟一个附加的标签(小写字母) 问:每个节点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中
阅读全文