link
给你一个下标从 0 开始的整数数组 nums 。你需要将 nums 重新排列成一个新的数组 perm 。
定义 nums 的 伟大值 为满足 0 <= i < nums.length 且 permi > numsi 的下标数目。
请你返回重新排列 nums 后的 最大 伟大值。
示例 1:
代码语言:shell复制输入:nums = [1,3,5,2,1,3,1]
输出:4
解释:一个最优安排方案为 perm = [2,5,1,3,3,1,1] 。
在下标为 0, 1, 3 和 4 处,都有 perm[i] > nums[i] 。因此我们返回 4 。
示例2
代码语言:shell复制输入:nums = [1,2,3,4]
输出:3
解释:最优排列为 [2,3,4,1] 。
在下标为 0, 1 和 2 处,都有 perm[i] > nums[i] 。因此我们返回 3 。
田忌赛马
nums 的最小值要参与匹配,否则更大的数字更难匹配上。
nums 的最小值要与次小值匹配,这样后面的数字才能取匹配更大的数。
为了方便实现,对 nums从小到大排序。(为什么可以排序?因为只在乎匹配关系,与下标无关。)
例如示例 1 排序后为 1,1,1,2,3,3,5那么前三个 111 分别与 2 3 3 匹配,2 与 5 匹配,后面就没有数字能匹配了。
代码语言:go复制func maximizeGreatness(nums []int) (i int) {
sort.Ints(nums)
for _, x := range nums {
if x > nums[i] {
i
}
}
return
}