- 输出:1
提示
-
1 <= nums.length <= 105
-
1 <= nums[i] <= 105
-
1 <= k <= 105
题目来源:LeetCode
最简单的解法就是使用暴力法,先对原数组进行排序,然后对数组中的每一个元素,对它前面的元素往前遍历,在操作次数不超过 k 的情况下,频数加一,直到操作次数超过 k 则终止。时间复杂度为 O(n^2)。
package com.chenpi;
import java.util.Arrays;
/**
-
@Description
-
@Author 陈皮
-
@Date 2021/7/19
-
@Version 1.0
*/
public class MaxFrequency {
public int maxFrequency(int[] nums, int k) {
// 从小到大排序
Arrays.sort(nums);
// 记录滑动过程中的最大频数
int max = 0;
// 从左往后(小到大)遍历每一个元素nums[j],判断它是否那个最大频数的元素
for (int j = 0; j < nums.length; j++) {
int i = j;
int tempK = k;
while (i >= 0 && ((nums[j] - nums[i]) <= tempK)) {
tempK -= nums[j] - nums[i];
i–;
}
max = Math.max(max, j - i);
}
return max;
}
public static void main(String[] args) {
MaxFrequency maxFrequency = new MaxFrequency();
int[] nums = {1, 2, 4};
System.out.println(maxFrequency.maxFrequency(nums, 5));
}
}
不过上述解法在数组长度很大的时候,执行比较耗时。其实这道题考察的是滑动窗口解法,先将数组从小到大排序,然后遍历数组每一个元素,看它的左边窗口最大长度即这个元素的频数,然后求出这些频数的最大值即可。
package com.chenpi;
import java.util.Arrays;
/**
-
@Description
-
@Author 陈皮
-
@Date 2021/7/19
-
@Version 1.0
*/
public class MaxFrequency {
public int maxFrequency(int[] nums, int k) {
// 从小到大排序
Arrays.sort(nums);
// 记录滑动过程中的最大频数
int max = 0;
int tempSum = 0;
// 从左往后(小到大)遍历每一个元素nums[j],判断它是否那个最大频数的元素
for (int i = 0, j = 0; j < nums.length; j++) {
// j-i是滑动窗口元素的个数(排除窗口内最后一个元素nums[j])
// nums[j] * (j - i) - tempSum 窗口前面几个元素的差值
// 如果差值超过k则代表不满足,左窗口需要往后滑动一位,并减去这个调出窗口的元素值
while (nums[j] * (j - i) - tempSum > k) {
tempSum -= nums[i++];
}
// 右窗口往后滑动一位,并且窗口总值加上当前元素
tempSum += nums[j];
// 之前窗口的最大频数和当前窗口频数哪个大
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
最后
总而言之,面试官问来问去,问的那些Redis知识点也就这么多吧,复习的不够到位,知识点掌握不够熟练,所以面试才会卡壳。将这些Redis面试知识解析以及我整理的一些学习笔记分享出来给大家参考学习
还有更多学习笔记面试资料也分享如下:
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!
会卡壳。将这些Redis面试知识解析以及我整理的一些学习笔记分享出来给大家参考学习
还有更多学习笔记面试资料也分享如下:
[外链图片转存中…(img-sprrltAT-1712168558561)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!