前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2592. 最大化数组的伟大值

2592. 最大化数组的伟大值

原创
作者头像
Michel_Rolle
发布2023-07-17 23:26:19
2.2K0
发布2023-07-17 23:26:19
举报
文章被收录于专栏:LeetCode解题LeetCode解题

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
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档