leetcode hard

Espresso Macchiato2 小时前
动态规划·leetcode hard·trie树·leetcode 3213·leetcode周赛405
Leetcode 3213. Construct String with Minimum Cost这一题的话思路上还是比较直接的,就是一个trie树加一个动态规划,通过trie树来快速寻找每一个位置作为起点时能够匹配的全部字符串,然后用一个动态规划来获取最优剪切方案。
Espresso Macchiato7 天前
leetcode hard·图算法·拓扑图·leetcode 3203·leetcode 周赛404
Leetcode 3203. Find Minimum Diameter After Merging Two Trees这一题的话算是一个拓扑树的题目?总之就是从树的叶子节点不断向上遍历,不断地删除已访问的叶子节点,并加入更新之后的新的叶子节点,这样我们就能得到树的最大深度,然后在遍历过程中我们考察其任意节点上的当前深度和已有深度的和的最大值,即为经过该节点的最大路径长度,遍历整张图,我们即刻获得整个树的深度和diameter。然后,我们要连接两个图的话,能够获得的最大路径长度就是两个图的深度之和加一。
Espresso Macchiato14 天前
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 Macchiato22 天前
leetcode hard·leetcode周赛402·leetcode 3187·segment tree·分段树
Leetcode 3187. Peaks in Array这一题算是一个套路题,基本就是典型的segment tree的题目。对于任意一个query,segment tree可以直接获得对应范围内的peak的数目(需要去除头尾),而对于任意一个元素的update,其可能影响到的peak的位置为包含其前后元素的至多3个值,我们将这三个值分别重新计算然后update一下即可。
Espresso Macchiato2 个月前
二进制·二分法·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 Macchiato3 个月前
并查集·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 Macchiato3 个月前
动态规划·leetcode hard·leetcode题解·leetcode 3117·leetcode周赛393
Leetcode 3117. Minimum Sum of Values by Dividing Array这一题思路上就是一个动态规划,我们只需要考察每一个元素是否需要放在当前的group当中还是作为新的group的开始元素,然后在所有的可能结果当中取最小值即可。
Espresso Macchiato3 个月前
字典树·leetcode hard·trie树·leetcode 3093·leetcode周赛390
Leetcode 3093. Longest Common Suffix Queries这一题的话思路上其实就是一个Trie树的变体。对于每一个wordsQuery当中的word,我们要在wordsContainer当中获取答案,我们只需要将wordsContainer构建成一个Trie树,就能够快速地获得我们所需的答案了。
Espresso Macchiato4 个月前
·leetcode hard·leetcode 3069·leetcode双周赛125·异或操作
Leetcode 3068. Find the Maximum Sum of Node Values这一题虽然标记为一道hard的题目,但其实就是一个脑筋急转弯的题目。我们只需要想明白一点即可:因此,我们只需要计算出所有点如果进行异或操作之后可以得到的改变量,然后将其从大到小进行排序,两两配对之后考察最大能够获得多少累积增长即可。
Espresso Macchiato4 个月前
动态规划·贪婪算法·leetcode hard·leetcode 3049·leetcode周赛386
Leetcode 3049. Earliest Second to Mark Indices II这道题我看貌似难度报表,比赛的时候貌似只有36个人搞定了这道题目,然后最快的人耗时也花了40min以上,就很离谱,和平时基本15分钟就能有大佬全部做出来4道题的情况完全不懂,就很吓人。
Espresso Macchiato5 个月前
剪枝·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 Macchiato5 个月前
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 Macchiato7 个月前
leetcode hard·leetcode题解·leetcode 2949·leetcode周赛373·字符串分段
Leetcode 2949. Count Beautiful Substrings II这一题真的很丢脸,居然没有搞定,是看了大佬们的思路之后才想明白的,就感觉丢脸丢大了……这道题讲道理挺简单的,而且相似类型的题目其实以前做过挺多的了,想不通但是为啥没有直接想到思路……
Espresso Macchiato8 个月前
动态规划·深度优先遍历·leetcode hard·leetcode 2920·leetcode周赛369
Leetcode 2920. Maximum Points After Collecting Coins From All Nodes这一题思路上也很直接,就是一个深度优先遍历加上一个动态规划,分别考虑在两种情况下对应的coin收集数目,然后取最大值即可。
Espresso Macchiato9 个月前
动态规划·leetcode hard·回文·leetcode 2911·leetcode周赛368
Leetcode 2911. Minimum Changes to Make K Semi-palindromes这一题属实也是把我坑惨了……坦率地说,这道题本身并没有啥难度,但是坑爹的是题目表述简直有毒,有两个细节题目里面压根没提,一个是我从中文版本的题目当中发现的,另一个则是我根据失败的样例当中反推出来的,这简直有毒……
Espresso Macchiato9 个月前
leetcode·无向图·leetcode 2872·双周赛 114·leetcode hard
Leetcode 2872. Maximum Number of K-Divisible Components这一题思路上我觉得还是挺直接的,就是一个自底向上的团聚算法。首先,由于题目中保证了所有节点的总和一定是k的倍数,因此事实上我们的任意切割都不会导致剩余其他点的总和无法被k整除。故一个简单直接的思路就是自底向上地进行团聚。