1838.最高频元素的频数
-
思路:
-
排序+暴力,超时,
-
排序+滑动窗口,数组问题考虑用滑动窗口来做,定义左边界为l,右边界为r,我们只要保证窗口内元素和左边界r的差值和小于等于K即可,设差值和为count,最大可能频数为ans
-
count<=k,不做处理;
-
count>k,减去左边界和右边界的差值,并l++;
ans取最大的窗口长度,即max(ans,r-l+1);
-
-
-
代码:
public int maxFrequency(int[] nums, int k) { Arrays.sort(nums); long count=0; int l=0,ans=1;//ans初始为1,因为最小长度是1 for(int r=1;r<nums.length;r++){ count+=(long)(nums[r]-nums[r-1])*(r-l);//long防止溢出 while(count>k){ count-=nums[r]-nums[l]; l++; } ans=Math.max(ans,r-l+1); } return ans; }