技术栈
leetcode hard
Espresso Macchiato
10 天前
动态规划
·
二进制
·
leetcode hard
·
leetcode 3352
·
leetcode周赛423
Leetcode 3352. Count K-Reducible Numbers Less Than N
这一题的话思路上我是拆成了两步来做的,首先,我们要认识到,这里的变化本质就是看数的二进制表达当中有多少个1,因此,假设给定数字的二进制表示长度为 n n n,我们就是要遍历 1 1 1到 n n n当中有多少数能够在至多 k k k次变换之后变为 1 1 1,显然 k = 1 k=1 k=1时,答案就只有 1 1 1,也就是数字只能包含一个二级位为 1 1 1,然后,对于其他的数,我们只需要用一个迭代遍历即可快速获取,整体的复杂度就是 O ( k n ) O(kn) O(kn)。
Espresso Macchiato
1 个月前
leetcode
·
滑动窗口
·
leetcode hard
·
leetcode 3321
·
leetcode周赛419
Leetcode 3321. Find X-Sum of All K-Long Subarrays II
这一题同样虽然是一道hard的题目,但也是比较常规的,就是通过一个滑动窗口不断地维护当前长度为k的滑动窗口内所有数字的出现次数,进而维护一个按照出现次数和大小从大到小排列的数组,最后使用这个数组维护top x的频次的数字的总和即可。
Espresso Macchiato
3 个月前
滑动窗口
·
leetcode hard
·
leetcode周赛411
·
leetcode 3261
·
累积数组
Leetcode 3261. Count Substrings That Satisfy K-Constraint II
这一题我们首先可以仿照题目3258的方式通过一个滑动窗口快速得到每一个位置作为起点时其对应的最大K-Constraint的边界。
Espresso Macchiato
3 个月前
leetcode hard
·
回文
·
分类讨论
·
leetcode 3260
·
leetcode周赛411
Leetcode 3260. Find the Largest Palindrome Divisible by K
这一题的话首先我们可以快速给出几个简单情况的答案:而对于其他的情况,暂时没啥好的思路,因此给出了一个暴力的解法,就是先通过一个迭代由大到小给出所有的回文序列,然后手动写一个除法函数判断一下是否可以整除即可。
Espresso Macchiato
4 个月前
动态规划
·
leetcode hard
·
trie树
·
leetcode 3213
·
leetcode周赛405
Leetcode 3213. Construct String with Minimum Cost
这一题的话思路上还是比较直接的,就是一个trie树加一个动态规划,通过trie树来快速寻找每一个位置作为起点时能够匹配的全部字符串,然后用一个动态规划来获取最优剪切方案。
Espresso Macchiato
5 个月前
leetcode hard
·
图算法
·
拓扑图
·
leetcode 3203
·
leetcode 周赛404
Leetcode 3203. Find Minimum Diameter After Merging Two Trees
这一题的话算是一个拓扑树的题目?总之就是从树的叶子节点不断向上遍历,不断地删除已访问的叶子节点,并加入更新之后的新的叶子节点,这样我们就能得到树的最大深度,然后在遍历过程中我们考察其任意节点上的当前深度和已有深度的和的最大值,即为经过该节点的最大路径长度,遍历整张图,我们即刻获得整个树的深度和diameter。然后,我们要连接两个图的话,能够获得的最大路径长度就是两个图的深度之和加一。
Espresso Macchiato
5 个月前
leetcode
·
动态规划
·
leetcode hard
·
leetcode 3193
·
leetcode双周赛133
Leetcode 3193. Count the Number of Inversions
这一题的话我的思路核心还是动态规划,因此核心就是迭代关系如何构建。我们定义 f ( n , k ) f(n, k) f(n,k)表示将1到 n n n一共n个元素进行排列,一共有 k k k个逆序pair的排列数目。我们考察 f ( n + 1 , k ) f(n+1, k) f(n+1,k)的构造方式。
Espresso Macchiato
5 个月前
leetcode hard
·
leetcode周赛402
·
leetcode 3187
·
segment tree
·
分段树
Leetcode 3187. Peaks in Array
这一题算是一个套路题,基本就是典型的segment tree的题目。对于任意一个query,segment tree可以直接获得对应范围内的peak的数目(需要去除头尾),而对于任意一个元素的update,其可能影响到的peak的位置为包含其前后元素的至多3个值,我们将这三个值分别重新计算然后update一下即可。
Espresso Macchiato
6 个月前
二进制
·
二分法
·
leetcode hard
·
leetcode双周赛130
·
leetcode 3145
Leetcode 3145. Find Products of Elements of Big Array
这道题思路上还是比较直接的,就是实现上非常的繁琐,着实花了不少力气。显然,这道题本质上就是要实现一个快速的query(i, j, k)函数,可以求出big array当中i到j位置当中所有元素的积对于k的模。
Espresso Macchiato
7 个月前
并查集
·
leetcode hard
·
leetcode 3108
·
leetcode周赛392
·
dsu
Leetcode 3108. Minimum Cost Walk in Weighted Graph
这一题一开始被吓到了,因为想的是要求出query当中任意两个点的一个联通通路,使得cost最小,这个会是一个最优路径选择问题,然后query和点的数目又都是 1 0 5 10^5 105量级,就很唬人。
Espresso Macchiato
7 个月前
动态规划
·
leetcode hard
·
leetcode题解
·
leetcode 3117
·
leetcode周赛393
Leetcode 3117. Minimum Sum of Values by Dividing Array
这一题思路上就是一个动态规划,我们只需要考察每一个元素是否需要放在当前的group当中还是作为新的group的开始元素,然后在所有的可能结果当中取最小值即可。
Espresso Macchiato
8 个月前
字典树
·
leetcode hard
·
trie树
·
leetcode 3093
·
leetcode周赛390
Leetcode 3093. Longest Common Suffix Queries
这一题的话思路上其实就是一个Trie树的变体。对于每一个wordsQuery当中的word,我们要在wordsContainer当中获取答案,我们只需要将wordsContainer构建成一个Trie树,就能够快速地获得我们所需的答案了。
Espresso Macchiato
9 个月前
树
·
leetcode hard
·
leetcode 3069
·
leetcode双周赛125
·
异或操作
Leetcode 3068. Find the Maximum Sum of Node Values
这一题虽然标记为一道hard的题目,但其实就是一个脑筋急转弯的题目。我们只需要想明白一点即可:因此,我们只需要计算出所有点如果进行异或操作之后可以得到的改变量,然后将其从大到小进行排序,两两配对之后考察最大能够获得多少累积增长即可。
Espresso Macchiato
9 个月前
动态规划
·
贪婪算法
·
leetcode hard
·
leetcode 3049
·
leetcode周赛386
Leetcode 3049. Earliest Second to Mark Indices II
这道题我看貌似难度报表,比赛的时候貌似只有36个人搞定了这道题目,然后最快的人耗时也花了40min以上,就很离谱,和平时基本15分钟就能有大佬全部做出来4道题的情况完全不懂,就很吓人。
Espresso Macchiato
10 个月前
剪枝
·
leetcode hard
·
leetcode 3027
·
leetcode双周赛123
·
leetcode 3025
Leetcode 3027. Find the Number of Ways to Place People II
这一题的话我也没想到啥特别好的思路,采用的纯粹是遍历+剪枝的思路。遍历的话好理解,对于 N N N个位置当中要找到任意两个位置作为Takina和Chisato的位置,一共就是 O ( N 2 ) O(N^2) O(N2)的算法复杂度,然后就是要判断这两个位置是否合法,这个至多又会引入 O ( N ) O(N) O(N)的算法复杂度,一共可能就变成了 O ( N 3 ) O(N^3) O(N3)的算法复杂度,明显太多了……
Espresso Macchiato
10 个月前
z算法
·
leetcode hard
·
leetcode 3031
·
leetcode周赛383
·
leetcode 3029
Leetcode 3031. Minimum Time to Revert Word to Initial State II
这一题就是一个z算法的题目,算是比较套路的题目了。关于z算法,之前我们已经写过一个博客(经典算法:Z算法(z algorithm))对这个经典算法本身进行了一下介绍,这里就不展开了,有兴趣的读者可以自行跳转去看一下,或者网上随便其他找一个介绍文章也可以,挺常见的一个算法了。
Espresso Macchiato
1 年前
leetcode hard
·
leetcode题解
·
leetcode 2949
·
leetcode周赛373
·
字符串分段
Leetcode 2949. Count Beautiful Substrings II
这一题真的很丢脸,居然没有搞定,是看了大佬们的思路之后才想明白的,就感觉丢脸丢大了……这道题讲道理挺简单的,而且相似类型的题目其实以前做过挺多的了,想不通但是为啥没有直接想到思路……
Espresso Macchiato
1 年前
动态规划
·
深度优先遍历
·
leetcode hard
·
leetcode 2920
·
leetcode周赛369
Leetcode 2920. Maximum Points After Collecting Coins From All Nodes
这一题思路上也很直接,就是一个深度优先遍历加上一个动态规划,分别考虑在两种情况下对应的coin收集数目,然后取最大值即可。
Espresso Macchiato
1 年前
动态规划
·
leetcode hard
·
回文
·
leetcode 2911
·
leetcode周赛368
Leetcode 2911. Minimum Changes to Make K Semi-palindromes
这一题属实也是把我坑惨了……坦率地说,这道题本身并没有啥难度,但是坑爹的是题目表述简直有毒,有两个细节题目里面压根没提,一个是我从中文版本的题目当中发现的,另一个则是我根据失败的样例当中反推出来的,这简直有毒……
Espresso Macchiato
1 年前
leetcode
·
无向图
·
leetcode 2872
·
双周赛 114
·
leetcode hard
Leetcode 2872. Maximum Number of K-Divisible Components
这一题思路上我觉得还是挺直接的,就是一个自底向上的团聚算法。首先,由于题目中保证了所有节点的总和一定是k的倍数,因此事实上我们的任意切割都不会导致剩余其他点的总和无法被k整除。故一个简单直接的思路就是自底向上地进行团聚。