2592. 最大化数组的伟大值

2023-07-17 23:26:19 浏览数 (1)

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
}

0 人点赞