题目
元素的 频数 是该元素在一个数组中出现的次数。
给你一个整数数组 nums
和一个整数 k
。在一步操作中,你可以选择 nums
的一个下标,并将该下标对应元素的值增加 1
。
执行最多 k
次操作后,返回数组中最高频元素的 最大可能频数 。
示例 1:
1 | 输入:nums = [1,2,4], k = 5 |
示例 2:
1 | 输入:nums = [1,4,8,13], k = 5 |
示例 3:
1 | 输入:nums = [3,9,6], k = 2 |
提示:
1 <= nums.length <= 105
1 <= nums[i] <= 105
1 <= k <= 105
题解
1 | class Solution { |
知识点
题目翻译:求一个数组中,如何使用给定的次数k
,将数组中某些元素执行k
次的加1
操作,使得数组中相同元素尽可能地多。结果要的是这个元素的频数。
应当对【离我们选定的最高频元素最近的元素】进行加1
操作。这个最近指的是,差值最近。经过排序后,也就是距离最近。
再次翻译题目:如何在有限的k次操作中,尽可能多的让某个区间中的值相等,求这个最长区间的长度。使用滑动窗口。
操作数的计算公式:count += (long)(nums[right] - nums[right - 1]) * (right - left);
注意:这里需要强制转换为long
,不然会溢出有样例过不了。
图解如下: