本文主要是介绍Leetcode 超难题目 Hard,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
动态规划
2945. 找到最大非递减数组的长度 (难度分2943,“超难”)
这道题很有可能是LC主站(LCP除外)新的天花板,之所以难度分没有超过1719题,是因为双周赛样本量本身不多,而这题有一定的“猜结论”。某个LC积分2900+的大佬认为,即使数据范围只有1000,这也是一道相当难的题目。因为记录dp[j]为最优时,nums[j]的最小值(注意nums[j]很可能是被改过的),这样的DP本身就很难想到。而同时保证dp[j]最大nums[j]最小是否就更利于后面的转移,这点非常难证明。这个题的数据范围并不是1000,因此需要单调数据结构优化来保证复杂度合理。
2809. 使数组和小于等于 x 的最少时间 (难度分2978,“超难”)
思路也是非常难想的,只是代码很好写。很显然重复操作相同下标一定是血亏的,而根据排序不等式,如果选了一些下标j,则对应nums2元素较大的j应该尽量晚操作。因此正解是转化为二维DP,状态定义为前i个数(注意是按nums2从小到大排好的前i个)中操作j个数,能减少的数组和。然后根据每多操作一次总和增加sum(nums2),遍历DP数组找答案。注意这道题二分猜答案是错误的,由于每操作一次都会带来额外的数组和,操作j次能满足题意,但操作j+1次做不到是很正常的。
2851.字符串转换 (难度分2857,“超纲”)
题号和难度分正好是相邻素数~这道题有2个超纲点
这篇关于Leetcode 超难题目 Hard的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!