2592. 最大化数组的伟大值
题目地址(2592. 最大化数组的伟大值)
https://leetcode.cn/problems/maximize-greatness-of-an-array/
题目描述
前置知识
二分
贪心
公司
暂无
二分
思路
我们可以将 nums 进行一次排序。接下来是重点,如果 nums 的伟大值是 k,那么排序后的 nums 的前 k 大的数一定比前 k 小的数都大。
注意我们比较前 k 大和 前 k 小的数时候要用反田忌赛马思想,即用前 k 大的中最小的和前 k 小的最小的比较。具体看下方代码实现。
不会二分的看下仓库的二分专题,里面有讲解+模板。
接下来就是套最右二分模板即可。
关键点
能力检测二分
代码
语言支持:Python3
Python3 Code:
复杂度分析
令 n 为数组长度。
时间复杂度:$O(nlogn)$
空间复杂度:不确定,取决于内置的排序算法
贪心
思路
还有一种性能更加好的做法。还是先排序,接下来用一个指针 i 记录”被比下去的数字“,显然我们要贪心地选择尽可能小的数字,因此他们更容易被比下去,而且其和较大的数贡献都是一样的(都是使得伟大值增加 1)。
接下来,我们需要选择谁把这些数字”比下去“,同样我们用尽可能小的数,这样留下较大的数字才更有可能将其他数字”比下去“。
代码
语言支持:Python3
Python3 Code:
复杂度分析
令 n 为数组长度。
时间复杂度:$O(nlogn)$
空间复杂度:不确定,取决于内置的排序算法
此题解由 力扣刷题插件 自动生成。
力扣的小伙伴可以关注我,这样就会第一时间收到我的动态啦~
以上就是本文的全部内容了。大家对此有何看法,欢迎给我留言,我有时间都会一一查看回答。更多算法套路可以访问我的 LeetCode 题解仓库:https://github.com/azl397985856/leetcode 。 目前已经 40K star 啦。大家也可以关注我的公众号《力扣加加》带你啃下算法这块硬骨头。
关注公众号力扣加加,努力用清晰直白的语言还原解题思路,并且有大量图解,手把手教你识别套路,高效刷题。
最后更新于