算法训练营day11 栈与队列(栈的应用,单调队列,优先队列)

💡 解题思路

  1. 📝 确定输入与输出
  2. 🔍 分析复杂度
  3. 🔨 复杂题目拆分严谨且完整 地拆分为更小的可以解决的子问题(栈和队列的功能,栈和队列的变体应用)–(多总结
  4. 💭 选择处理逻辑: 根据拆分后的子问题,总结并选择合适的问题处理思路单调队列,优先队列
  5. 🔎 检查特殊情况:边界条件和特殊情况
  6. 🏁 返回结果

7. 逆波兰表达式求值 (栈的应用)

class Solution {
    public static int evalRPN(String[] tokens) {
        Set<Character> set = new HashSet<>();
        set.add('+');
        set.add('-');
        set.add('*');
        set.add('/');
        Stack<Integer> stack = new Stack<>();
        for (String token : tokens) {
            char c = token.charAt(0);
            if (token.length() == 1 && set.contains(c)) {
                if (stack.size() < 2) {  
                } else {
                    int a = stack.pop();
                    int b = stack.pop();
                    stack.push(calculate(b, a, c));
                }
            } else {
                stack.push(Integer.parseInt(token));
            }
        }
        return stack.pop();
    }

    public static int calculate(int num1, int num2, char operation) {
        int result = 0;
        switch(operation) {
            case '+':
                result = num1 + num2;
                break;
            case '-':
                result = num1 - num2;
                break;
            case '*':
                result = num1 * num2;
                break;
            case '/':
                result = num1 / num2;
                break;
            default:

        }
        return result;
    }
}

239. 滑动窗口最大值(单调队列)

class Solution {
    public int[] maxSlidingWindow(int[] nums, int k) {
        int n = nums.length;
        Deque<Integer> deque = new LinkedList<Integer>();
        for (int i = 0; i < k; i++) {
            while(!deque.isEmpty() && nums[deque.peekLast()] <= nums[i]) {
                deque.pollLast();
            }
            deque.offerLast(i);
        }
        int[] ans = new int[n-k+1];
        ans[0] = nums[deque.peekFirst()];
        for (int i = k; i < n; i++) {
            while(!deque.isEmpty() && nums[i] >= nums[deque.peekLast()]) {
                deque.pollLast();
            }
            deque.offerLast(i);
            while (deque.peekFirst() <= i - k) {
                deque.pollFirst();
            }
            ans[i-k+1] = nums[deque.peekFirst()];
        }
        return ans;
    }
}

347.前 K 个高频元素(优先队列)

class Solution {
    public int[] topKFrequent(int[] nums, int k) {
        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
        for (int num : nums) {
            map.put(num, map.getOrDefault(num, 0) + 1);
        }

        PriorityQueue<int[]> queue = new PriorityQueue<int[]>(new Comparator<int[]>() {
            public int compare(int[] m, int[] n) {
                return m[1] - n[1];
            }
        });

        for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
            int num = entry.getKey(), count = entry.getValue();
            if (queue.size() == k) {
                if (queue.peek()[1] < count) {
                    queue.poll();
                    queue.offer(new int[] {num, count});
                }
            } else {
                queue.offer(new int[]{num, count});
            }
        }

        int[] res = new int[k];
        for (int i = 0; i < k; i++) {
            res[i] = queue.poll()[0];
        }
        return res;
        
    }
}

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-14 05:00:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-14 05:00:02       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-14 05:00:02       58 阅读
  4. Python语言-面向对象

    2024-07-14 05:00:02       69 阅读

热门阅读

  1. Cesium中创建局部坐标系

    2024-07-14 05:00:02       27 阅读
  2. PostgreSQL的pg_dirtyread工具

    2024-07-14 05:00:02       23 阅读
  3. 怎样把pptx课件转换成word文档

    2024-07-14 05:00:02       26 阅读
  4. Github 2024-07-13 Rust开源项目日报 Top10

    2024-07-14 05:00:02       25 阅读
  5. 设计模式详解(十八)——责任链模式

    2024-07-14 05:00:02       21 阅读
  6. Vue3 关于scss预编译中:deep 其中的deep如何理解

    2024-07-14 05:00:02       22 阅读
  7. stm32使用通用定时器生成pwm

    2024-07-14 05:00:02       26 阅读
  8. 如何实现一个分布式锁

    2024-07-14 05:00:02       19 阅读
  9. BGP笔记的基本概要

    2024-07-14 05:00:02       23 阅读
  10. 在RHEL9.4上安装Python3.11环境

    2024-07-14 05:00:02       21 阅读
  11. Hypertable install of rhel6.0

    2024-07-14 05:00:02       22 阅读