https://leetcode-cn.com/problems/frequency-of-the-most-frequent-element/
思路:首先不难想到对原数组排序……那么对于每个起始点
l
l
l,我们可以计算出满足条件的最大的
r
r
r,更新
a
n
s
=
m
a
x
(
a
n
s
,
r
−
l
+
1
)
ans=max(ans,r-l+1)
ans=max(ans,r−l+1)。但是这样复杂度是
O
(
n
2
)
O(n^2)
O(n2)的,还是会超时。进一步思考,不难发现如果区间
[
l
,
r
]
[l,r]
[l,r]不满足题意,那么对于任意
l
′
<
=
l
l'<=l
l′<=l以及
r
′
>
=
r
r'>=r
r′>=r,区间
[
l
′
,
r
′
]
[l',r']
[l′,r′]一定不满足题意,因此没必要枚举
l
l
l计算
r
r
r,滑动窗口即可。
class Solution {
public:
int maxFrequency(vector<int>& nums, int k) {
sort(nums.begin(),nums.end());
int n=nums.size(),l=0,r=1,ans=1;
while(r<n)
{
int sum=(r-l)*(nums[r]-nums[r-1]);
k-=sum;
while(k<0)
k+=nums[r]-nums[l++];
++r;
ans=max(ans,r-l);
}
return ans;
}
};