题解 | 最小活动范围

最小活动范围

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

  1. 单调栈。找到窗口最小的,且窗口缩小后,下一个最小的。符合单调栈的应用场景
  2. 窗口化在 L18

import java.util.*;


public class Solution {
    public int[] minSlidingWindow (int[] nums, int k) {
        final int n = nums.length;
        int[] ans = new int[n - k + 1];
        Deque<Integer> q = new ArrayDeque<>();
        for (int i = 0; i < k; ++i) {
            while (!q.isEmpty() && nums[q.getLast()] >= nums[i]) {
                q.removeLast();
            }
            q.addLast(i);
        }
        ans[0] = nums[q.getFirst()];
        for (int i = k; i < n; ++i) {
            final int l = i - k + 1;
            if (q.getFirst() < l) {
                q.removeFirst();
            }
            while (!q.isEmpty() && nums[q.getLast()] >= nums[i]) {
                q.removeLast();
            }
            q.addLast(i);
            ans[i - k + 1] = nums[q.getFirst()];
        }
        return ans;
    }
}

全部评论

相关推荐

有担当的灰太狼又在摸鱼:零帧起手查看图片
点赞 评论 收藏
分享
05-09 13:22
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务