problem:2653. 滑动子数组的美丽值
思路:定长滑动窗口不难,难的是找到第k小的数,然而本题的数据范围不是很大,可以直接暴力去枚举第k小的数。
Accode:
class Solution {
public:
vector<int> getSubarrayBeauty(vector<int>& nums, int k, int x) {
int len = nums.size();
vector<int> ans;
vector<int> cnt(101,0);
deque<int> deq;
for(int i=0;i<len;i++){
if(deq.size() && i-deq.front()+1>k){
int num = nums[deq.front()]+50;
cnt[num]--;
deq.pop_front();
}
deq.push_back(i);
cnt[nums[i]+50]++;
if(i+1>=k){
int sum = 0;
bool flag = true;
for(int i=0;i<cnt.size();i++){
sum+=cnt[i];
if(sum>=x && i-50<0){
ans.push_back(i-50);
flag = false;
break;
}
}
if(flag) ans.push_back(0);
}
}
return ans;
}
};
时间复杂度:$o(n*100)$