欢迎光临散文网 会员登陆 & 注册

复盘|2022.3每日一题

2022-11-02 21:30 作者:UCLmsc  | 我要投稿

3.1题目 6. Z 字形变换

【直接构造】因此对于矩阵第一行的非空字符,其对应的idx均为t的倍数,即idx 恒等于 0 (mod t)

3.2题目 564. 寻找最近的回文数

【模拟】分别计算出以下每一种可能的方案对应的回文整数,在其中找到与原数最近且不等于原数的数即为答案。1.用原数的前半部分替换后半部分得到的回文整数。2.用原数的前半部分加一后的结果替换后半部分得到的回文整数。3.用原数的前半部分减一后的结果替换后半部分得到的回文整数。4.为防止位数变化导致构造的回文整数错误,因此直接构造999..999和100..001作为备选答案。

3.3题目 258. 各位相加

【数学】对num分类讨论:num不是9的倍数时,其数根即为num除以9的余数;num是9的倍数时。如果num=0,则其数根是0;如果num>0,则各位相加的结果大于0,其数根也大于0,因此其数根是9。

3.4题目 2104. 子数组范围和

【单调栈】所有子数组的最小值之和sumMin = Σ(minRight[i] - i) × (i - minLeft[i]) × nums[i],同理求得所有子数组的最大值之和sumMax。

3.5题目 521. 最长特殊序列 Ⅰ

【脑筋急转弯】字符串的子序列的长度不会超过该字符串的长度。若子序列的长度等于字符串的长度,那么子序列就是该字符串。若两字符串不相同,那么我们可以选择较长的字符串作为最长特殊序列,显然它不会是较短的字符串的子序列。特别地,当两字符串长度相同时(但不是同一字符串),我们仍然可以选择其中的一个字符串作为最长特殊序列,它不会是另一个字符串的子序列。若两字符串相同,那么任一字符串的子序列均会出现在两个字符串中,此时应返回-1。

3.6题目 2100. 适合打劫银行的日子

【DP】依次检测所有的日期,第i天前连续time天警卫数目都是非递增与第i天后连续tme天警卫数目都是非递减。只需要预先计算出第i天前警卫数目连续非递增的天数以及第1天后警卫数目连续非递减的天数即可判断第i天是否适合打劫。

3.7题目 504. 七进制数

【倒推 + 迭代】输入num代表我们思路中的十进制表示num_10,我们需要将还原出的num_7以字符串的形式返回。

3.8题目 2055. 蜡烛之间的盘子

【预处理 + 前缀和】对于每一个询问,我们只需要找到给定区间内最左侧和最右侧的两个蜡烛,这样两个蜡烛之间的所有盘子都是符合条件的。

3.9题目 798. 得分最高的最小轮调

【差分数组】遍历数组nums的所有元素并更新差分数组之后,遍历数组dffs并计算前缀和,则每个下标处的前缀和表示当前轮调下标处的得分。在遍历过程中维护最大得分和最大得分的最小轮调下标,遍历结束之后即可得到结果。

3.10题目 589. N 叉树的前序遍历

【递归】前序位置。

3.11题目 2049. 统计最高分的节点数目

【DFS】先用parents数组统计出每个节点的子节点,然后使用深度优先搜索来计算以每个节点为根结点的子树的大小,同时计算每个节点的大小,作为深度优先搜索的返回值,最后统计最大分数出现的次数。在实现上,统计最大分数出现的次数可以放到深度优先搜索中完成,从而节省一部分空间。

3.12题目 590. N 叉树的后序遍历

【递归】后序位置。

3.13题目 393. UTF-8 编码验证

【遍历 + 位运算】对于头字节,首先判断头字节和MASK1的按位与运算结果是否为0。如果为0则当前字符由1个字节组成。如果不为0则创建位掩码mask并将初始值设为MASK1,每次计算头字节和mask的按位与运算结果,如果结果不为0则将mask除以2(可通过右移位运算实现)并重复该过程,直到结果为0,此时可得到当前字符的字节数。

3.14题目 599. 两个列表的最小索引总和

【哈希表】使用一个哈希表记录st中每个餐厅对应的索引下标,然后遍历st2,如果st2中的餐厅存在于哈希表中,那么说明该餐厅是两人共同喜爱的,计算它的索引和。如果该索引和比最小索引和小,则清空结果,将该餐厅加入结果中,该索引和作为最小索引和;如果该索引和等于最小索引和,则直接将该餐厅加入结果中。

3.15题目 2044. 统计按位或能得到最大值的子集数目

【位运算】可以用一个长度为n比特的整数来表示不同的子集,在整数的二进制表示中,n个比特的值代表了对数组不同元素的取舍。第i位值为1则表示该子集选取对应元素,第i位值为0则表示该子集不选取对应元素。求出每个子集的按位或的值,并计算取到最大值时的子集个数。

3.16题目 432. 全 O(1) 的数据结构

【双向链表 + 哈希表】结合双向链表和哈希表来实现,链表中的每个节点存储一个字符串集合keys,和一个正整数count,表示eys中的字符串均出现count次。链表从头到尾的每个节点的cout值单调递增(但不一定连续)。此外,每个节点还需存储指向上一个节点的指针prev和指向下一个节点的指针next。

3.17题目 720. 词典中最长的单词

【哈希集合】将答案初始化为空字符串。使用哈希集合存储所有符合要求的单词,初始时将空字符串加入哈希集合。遍历数组words,对于每个单词,判断当前单词去掉最后一个字母之后的前缀是否在哈希集合中,如果该前缀在哈希集合中则当前单词是符合要求的单词,将当前单词加入哈希集合,并将答案更新为当前单词。

3.18题目 2043. 简易银行系统

【模拟】按题意模拟,tansfer操作、deposit操作、withdraw操作。

3.19题目 606. 根据二叉树创建字符串

【递归】递归得到二叉树的前序遍历,并在递归时加上额外的括号。

3.20题目 2039. 网络空闲的时刻

【BFS】将整个计算机网络视为一个无向图,服务器为图中的节点。根据图中的边对应的关系edges即可求出图中任意节点之间的最短距离。利用广度优先搜索求出节点0到其他节点的最短距离,然后依次求出每个节点变为空闲的时间,当所有节点都变为空闲时,整个网络即变空闲状态,因此网络的最早空闲时间即为各个节点中最晚的空闲时间。定义节点的空闲状态定义为该节点不再发送和接收消息。

3.21题目 653. 两数之和 IV - 输入二叉搜索树

【BFS + 哈希表】用深度优先搜索的方式遍历整棵树,用哈希表记录遍历过的节点的值。对于一个值为x的节点,我们检查哈希表中是否存在k一x即可。如果存在对应的元素,那么我们就可以在该树上找到两个节点的和为k;否则,我们将x放入到哈希表中。如果遍历完整棵树都不存在对应的元素,那么该树上不存在两个和为k的节点。

3.22题目 2038. 如果相邻两个颜色均相同则删除当前颜色

【贪心】当Alice的操作数大于Bob的操作数时,Alice获胜;否则,Bob获胜。

3.23题目 440. 字典序的第K小数字

【字典树思想】前序遍历该字典树即可得到字典序从小到大的数字序列,遍历到第k个节点即为第k小的数字。

3.24题目 661. 图片平滑器

【遍历】依次计算每一个位置平滑处理后的结果即可。

3.25题目 172. 阶乘后的零

【数学】n!尾零的数量即为n!中因子10的个数,而10=2×5,因此转换成求n!中质因子2的个数和质因子5的个数的较小值。

3.26题目 682. 棒球比赛

【模拟】用变长数组对栈进行模拟。

3.27题目 2028. 找出缺失的观测数据

【模拟构造】构造一种符合要求的答案:在缺失的n个观测数据中,有remainder个观测数据是quotient-+1,其余观测数据都是quotient。

3.28题目 693. 交替位二进制数

【模拟】从最低位至最高位,我们用对2取模再除以2的方法,依次求出输入的二进制表示的每一位,并与前一位进行比较。如果相同,则不符合条件;如果每次比较都不相同,则符合条件。

3.29题目 2024. 考试的最大困扰度

【滑动窗口】使用滑动窗口的方法,从左到右枚举右端点,维护区间中另一种字符的数量为sum,当sum超过k,我们需要让左端点右移,直到sum≤k。移动过程中,我们记录滑动窗口的最大长度,即为指定字符的最大连续数目。

3.30题目 1606. 找到处理最多请求的服务器

【模拟 + 有序集合 + 优先队列】将空闲服务器的编号都放入一个有序集合available中,将正在处理请求的服务器的处理结束时间和编号都放入一个优先队列busy中,优先队列满足队首的服务器的处理结束时间最小,用一个数组requests记录对应服务器处理的请求数目。

3.31题目 728. 自除数

【直接判断】遍历范围[left,right]内的所有整数,分别判断每个整数是否为自除数。


复盘|2022.3每日一题的评论 (共 条)

分享到微博请遵守国家法律