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号
浙公网安备 33010602011771号