美文网首页
常见队列问题

常见队列问题

作者: 知止9528 | 来源:发表于2021-02-20 22:50 被阅读0次

滑动窗口的最大值
给定一个数组和窗口长度k,求每个窗口内的最大值

解题思路
使用双端队列

  1. 从队尾加入新元素,从对头取出头元素
  2. 队列从左往右,保持递减
  3. 新加入的元素如果比队列内的小则弹出
  4. 当队头元素的索引小于,窗口左边界的索引时,需要把队头移除
  5. 不断取出队头则为每个窗口内的最大值
public class _滑动窗口的最大值 {
    public static void main(String[] args) {
        int[] nums = {1, 3, 5, 6, 7, 6, 8, 7, 9};
        int k = 3;
        //应该输出 5 5 7 7 6
        System.out.printf(Arrays.toString(getWindowMax(nums, k)));
    }

    public static int[] getWindowMax(int[] nums, int k) {

        //使用双端队列

        Deque<Integer> queue = new LinkedList<Integer>();
        int[] maxArr = new int[nums.length - k+1];
        for (int i = 0; i < nums.length; i++) {

            //保持队列单调递减
            //当新加入元素大于 队列内元素时  弹出队列内元素
            while (!queue.isEmpty() && nums[queue.peekLast()] <= nums[i]) {
                queue.removeLast();
            }
            queue.addLast(i);

            int left = i - k + 1;
            if (left < 0) {
                continue;
            }

            if (left > queue.peekFirst()) {
                queue.removeFirst();
            }
            //System.out.println("left>>"+left);
            //System.out.println(queue.peekFirst());
            maxArr[left] = nums[queue.peekFirst()];
        }
        return maxArr;
    }
}

相关文章

  • 常见队列问题

    滑动窗口的最大值给定一个数组和窗口长度k,求每个窗口内的最大值 解题思路使用双端队列 从队尾加入新元素,从对头取出...

  • 【消息队列】常见问题

    1. 如何保证幂等性? 待补充。 2. 如何控制消息的消费顺序? 待补充。 3. 数据是通过push还是pull方...

  • 消息队列常见问题

    如何保证消息队列的高可用? 如何保证消息不被重复消费(幂等性问题)? 如何保证消息的可靠性传输(消息丢失问题)? ...

  • 消息队列常见问题

    消息队列缺点 系统可用性降低:加入消息队列,当消息队列出问题,将会导致系统不可用,系统可用性会降低 系统复杂性增加...

  • 消息队列常见问题

    消息队列缺点 系统可用性降低:加入消息队列,当消息队列出问题,将会导致系统不可用,系统可用性会降低 系统复杂性增加...

  • 最大匹配算法实现

    问题描述 这应该是一个常见问题。有两个队列,A与B,A队列中元素与B队列中元素存在匹配关系,匹配时需要保持顺序关系...

  • Kafka高性能探究

    常见的消息队列 常见的消息队列主要有RabbitMQ,RocketMQ,ActiveMQ,Kafka,ZeroMQ...

  • 消息队列 - 常见问题汇总

    什么是消息队列 来看看维基百科怎么说的,顺带学学英语这波不亏: In computer science, mess...

  • 消息队列的常见问题

    一、为什么使用消息队列? 为什么使用?其实就是在实际业务中,有个具体的场景,如果不使用MQ,可能会有很多麻烦,用了...

  • 常见队列

    [toc] 有界队列 SynchronousQueue: “是这样 一种阻塞队列,其中每个 put 必须等待一个 ...

网友评论

      本文标题:常见队列问题

      本文链接:https://www.haomeiwen.com/subject/apqffltx.html