题解 | #最小活动范围#
最小活动范围
https://www.nowcoder.com/practice/f5e7c034bb5046089ce774e37e5342d9
- 题目考察的知识点 : 单调队列
- 题目解答方法的文字分析:
- 维护一个单调不降的队列 q ,其中队首元素对应的小时区间最小活动范围最大(即最优解)
- 如果当前队尾元素到当前位置的距离大于等于 k,则将队首元素出队;
- 重复步骤 1 直到队首元素到当前位置的距离小于 k;
- 将当前位置加入队尾;
- 如果当前位置减去队首位置大于等于 k,则将队首元素出队。
- 由于要求连续的 k 个小时内的最小活动范围,因此在前 k - 1 个小时内无法得到答案,所以需要等到第 k 个小时才开始输出结果。
- 本题解析所用的编程语言: Python
- 完整且正确的编程代码
# # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param nums int整型一维数组 # @param k int整型 # @return int整型一维数组 # import collections class Solution: def minSlidingWindow(self, nums: List[int], k: int) -> List[int]: n = len(nums) q = collections.deque() res = [] for i in range(n): while q and i - q[0][0] >= k: q.popleft() while q and nums[i] < q[-1][1]: q.pop() q.append((i, nums[i])) if i >= k - 1: res.append(q[0][1]) return res
牛客高频top202题解系列 文章被收录于专栏
记录刷牛客高频202题的解法思路