题目链接:https://leetcode-cn.com/problems/frequency-of-the-most-frequent-element/
思路:二分答案。二分一个答案,然后判断当前这个答案,是不是能找到一组数满足这个这个答案即可。找的思路就是先排序,然后用一组数的最大值*这组数据的个数-这些数的和,这样就是需要递增多少次,然后与k值比较一下大小即可(我是作差比较的)。
上代码:
class Solution {
boolean check(int[] nums, int k, int mid, int[] sum) {
int len = nums.length;
boolean flag = false;
for (int i = 0; i < len - mid + 1; i++) {
int w = nums[i + mid - 1];
int x = k;
x = x - (w * mid - (sum[i + mid] - sum[i]));
if (x >= 0) {
flag = true;
break;
}
}
return flag;
}
public int maxFrequency(int[] nums, int k) {
Arrays.sort(nums);
int len = nums.length;
int sum[] = new int[len + 1];
Arrays.fill(sum,0);
for (int i = 1; i <= len; i++) {
sum[i] = sum[i - 1] + nums[i - 1];
}
int l = 1, r = len;
int result = 1;
while (l <= r) {
int mid = (l + r) >> 1;
if (check(nums, k, mid, sum)) {
result = mid;
l = mid + 1;
} else {
r = mid - 1;
}
}
return result;
}
}