博客记录-day168-力扣

27 阅读1分钟

一、力扣

1、数据流的中位数

295. 数据流的中位数

image.png

class MedianFinder {
    PriorityQueue<Integer> firQueue;
    PriorityQueue<Integer> secQueue;

    public MedianFinder() {
        firQueue = new PriorityQueue<>((a, b) -> b.compareTo(a));//队头最大
        secQueue = new PriorityQueue<>((a, b) -> a.compareTo(b));//队头最小
    }

    public void addNum(int num) {
        if (firQueue.isEmpty() || num < firQueue.peek()) {
            firQueue.offer(num);
            if (firQueue.size() - secQueue.size() > 1) {
                secQueue.offer(firQueue.poll());
            }
        } else {
            secQueue.offer(num);
            if (secQueue.size() > firQueue.size()) {
                firQueue.offer(secQueue.poll());
            }
        }
    }

    public double findMedian() {
        if (firQueue.size() > secQueue.size()) {
            return (double) firQueue.peek();
        } else {
            return (double) (firQueue.peek() + secQueue.peek()) / 2;
        }
    }
}

2、破冰游戏

LCR 187. 破冰游戏

image.png

class Solution {

    public int iceBreakingGame(int num, int target) {
        return f(num, target);
    }

    public int f(int num, int target) {
        // 递归终止条件:只剩1人时,存活位置为0(基线条件)
        if (num == 1) {
            return 0;
        }
        // 递归计算前一步的存活位置,并调整当前步长的偏移量
        int x = f(num - 1, target);
        // 公式:(前一步位置 + 步长) % 当前人数,确定本轮存活位置
        return (target + x) % num;
    }
}

3、用队列实现栈

225. 用队列实现栈

image.png

class MyStack {
    ArrayDeque<Integer> queue1;
    ArrayDeque<Integer> queue2;

    public MyStack() {
        queue1 = new ArrayDeque<>();
        queue2 = new ArrayDeque<>();
    }

    public void push(int x) {
        queue1.offer(x);
        while (!queue2.isEmpty()) {
            queue1.offer(queue2.poll());
        }
        queue2 = queue1;
        queue1 = new ArrayDeque<>();
    }

    public int pop() {
        return queue2.poll();
    }

    public int top() {
        return queue2.peek();
    }

    public boolean empty() {
        return queue1.isEmpty() && queue2.isEmpty();
    }
}