剑指 offer 栈和队列篇

剑指 offer 栈和队列篇

文章目录

  • 剑指 offer 栈和队列篇
      • 用两个栈实现队列
    • 队列
      • 滑动窗口的最大值

用两个栈实现队列

import java.util.Stack;

public class Solution {
    Stack<Integer> stack1 = new Stack<Integer>();
    Stack<Integer> stack2 = new Stack<Integer>();
    
    public void push(int node) {
        stack1.push(node);
    }
    
    public int pop() {
        if (stack2.isEmpty()) {
            while (!stack1.isEmpty()) {
                stack2.push(stack1.pop());
            }
        }

        return stack2.pop();
    }
}

队列

滑动窗口的最大值

给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。

import java.util.ArrayList;
import java.util.LinkedList;

public class Solution {
    public ArrayList<Integer> maxInWindows(int [] num, int size) {
        ArrayList<Integer> res = new ArrayList<>();
        if (num == null || num.length == 0 || size == 0)
            return res;
        
        LinkedList<Integer> q = new LinkedList<>();
        for (int i = 0; i < num.length; i++) {
            while(!q.isEmpty() && num[q.peekLast()] <= num[i]) {
                q.pollLast();
            }
            q.addLast(i);
            if (i >= size + q.peekFirst())
                q.pollFirst();
            if (i >= size - 1) {
                res.add(num[q.peekFirst()]);
            }
        }

        return res;
    }
}

你可能感兴趣的:(剑指offer)