题解 | #最小活动范围#

最小活动范围

https://www.nowcoder.com/practice/f5e7c034bb5046089ce774e37e5342d9

考察知识点:单调队列

题目分析:

题目中的数组是指一头牛随时间的增加活动范围的变化而形成的数组。然后让求连续的k个小时内,牛的活动的最小范围。即:

这类题目应该使用双端队列做一个单调队列,使得队列尾为最小值,从尾到头值依次增大:

这样维护一个窗口中的最小值。

所用编程语言:C++

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型vector 
     * @param k int整型 
     * @return int整型vector
     */
    vector<int> minSlidingWindow(vector<int>& nums, int k) {
        // write code here
        deque<int> window;
        vector<int> res;
        int size = nums.size();
        for (int i = 0; i < size; i++) {
            if (!window.empty() && window.back() < i - k + 1) window.pop_back();
            while (!window.empty() && nums[window.front()] >= nums[i]) window.pop_front();
            window.push_front(i);
            if (i >= k - 1) res.push_back(nums[window.back()]);
        }
        return res;
    }
};

全部评论

相关推荐

2025-12-16 17:17
门头沟学院 产品经理
烤点老白薯:他第二句话的潜台词是想让你帮他点个瑞幸或者喜茶啥的
mt对你说过最有启发的一...
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
3
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务