力扣2653.滑动子数组的美丽值
题目
题目解析及思路
题目要求找到每个k长子数组中第x小的负数(没有则为0)
-
计数排序:数值作为下标 记录个数
- 求第x小的数 : 暴力枚举负数 直到找到第x个负数
代码
class Solution {
public:
vector<int> getSubarrayBeauty(vector<int>& nums, int k, int x) {
const int BIAS = 50;
int cnt[BIAS * 2 + 1],n = nums.size();
for(int i=0;i<k-1;i++)
cnt[nums[i]+BIAS] ++; //记录数组值
vector<int> ans(n-k+1);
for(int i=k-1;i<n;i++)
{
cnt[nums[i] + BIAS] ++ ;
int left = x;
for(int j=0;j<BIAS;j++) //暴力枚举所有负数
{
left -= cnt[j];
if(left <= 0) //说明一共找到了x个负数
{
ans[i-k+1] = j - BIAS;
break;
}
}
cnt[nums[i-k+1] + BIAS] --;
}
return ans;
}
};