前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >1838. 最高频元素的频数--题解

1838. 最高频元素的频数--题解

作者头像
付威
发布2021-04-28 10:07:31
4730
发布2021-04-28 10:07:31
举报
1838. 最高频元素的频数

元素的 频数 是该元素在一个数组中出现的次数。

给你一个整数数组 nums 和一个整数 k 。在一步操作中,你可以选择 nums 的一个下标,并将该下标对应元素的值增加 1

执行最多 k 次操作后,返回数组中最高频元素的 最大可能频数

示例 1:

代码语言:javascript
复制
输入:nums = [1,2,4], k = 5
输出:3
解释:对第一个元素执行 3 次递增操作,对第二个元素执 2 次递增操作,此时 nums = [4,4,4] 。
4 是数组中最高频元素,频数是 3 。

示例 2:

代码语言:javascript
复制
输入:nums = [1,4,8,13], k = 5
输出:2
解释:存在多种最优解决方案:
- 对第一个元素执行 3 次递增操作,此时 nums = [4,4,8,13] 。4 是数组中最高频元素,频数是 2 。
- 对第二个元素执行 4 次递增操作,此时 nums = [1,8,8,13] 。8 是数组中最高频元素,频数是 2 。
- 对第三个元素执行 5 次递增操作,此时 nums = [1,4,13,13] 。13 是数组中最高频元素,频数是 2 。

示例 3:

代码语言:javascript
复制
输入:nums = [3,9,6], k = 2
输出:1

提示:

  • 1 <= nums.length <= 105
  • 1 <= nums[i] <= 105
  • 1 <= k <= 105

题解

总体思路采用滑动窗口的方式:

  1. 计算窗口内的差值,如果转变成最后一个值的变化数量小于 k 时,直接向后移动窗口
  2. 如果窗口的值大于 K 时,移动左侧指针,计算出最大值
代码语言:javascript
复制
func maxFrequency(nums []int, k int) int {
	sort.Ints(nums)
	start,sum := 0,0
	ans := 1
	for i := 1; i < len(nums); i++ {
         //计算差值
         //1,2,5  (2-1)*1+(5-2)*2=7.
         //此处需要多想一下
		sum += (nums[i] - nums[i-1]) * (i - start)
		for sum > k {
			sum -= nums[i] - nums[start]
			start++

		}
		if i-start+1 > ans {
			ans = i - start + 1
		}

	}
	return ans

}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-04-252,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1838. 最高频元素的频数
  • 题解
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档