6390. 滑动子数组的美丽值
题目链接:6390. 滑动子数组的美丽值
方法:计数排序
解题思路
维护窗口内的每个数字出现的次数,然后从小到达遍历哈希计数数组,统计遍历过的总次数 \(cnt\),当 \(cnt\) >= \(x\) 时,说明当前的哈希数组下标即为当前窗口的第 \(x\) 小的数。
代码
class Solution {
public:
vector<int> getSubarrayBeauty(vector<int>& nums, int k, int x) {
int cnt[110] = {0};
for (auto &num : nums) num += 50;
vector<int> ans;
for (int l = 0, r = 0; r < nums.size(); r ++ ) {
cnt[nums[r]] ++ ;
if (r - l + 1 == k) {
int cur = 0, i = 0;
for (i = 0; i <= 49; i ++ ) {
if (cnt[i]) {
cur += cnt[i];
if (cur >= x) {
ans.push_back(i - 50);
break;
}
}
}
if (i == 50) ans.push_back(0);
cnt[nums[l]] -- ;
l ++ ;
}
}
return ans;
}
};
复杂度分析
时间复杂度:\(O(n)\);
空间复杂度:\(O(1)\)。

浙公网安备 33010602011771号