Day13|栈与队列03,239. 滑动窗口最大值、347.前 K 个高频元素,Day 13,滑动窗口最大值与前K个高频元素详解——栈与队列的应用实战篇,栈与队列实战详解,滑动窗口最大值与前K个高频元素解析 Day 13特辑

马肤

温馨提示:这篇文章已超过468天没有更新,请注意相关的内容是否还可用!

摘要:在Day 13的学习内容中,我们深入探讨了栈与队列的应用实战。讲解了如何通过栈实现滑动窗口最大值的问题,以及如何利用队列找出前K个高频元素。这些内容展示了栈和队列在解决实际问题中的重要作用和高效性。通过实战案例,我们更好地理解了这两种数据结构的应用场景和优势。

今天学习了数据结构与算法中的栈与队列的应用,遇到了两道具有挑战性的题目:滑动窗口最大值和前K个高频元素。

Day13|栈与队列03,239. 滑动窗口最大值、347.前 K 个高频元素,Day 13,滑动窗口最大值与前K个高频元素详解——栈与队列的应用实战篇,栈与队列实战详解,滑动窗口最大值与前K个高频元素解析 Day 13特辑 第1张

对于滑动窗口最大值问题,我通过使用Java的双端队列(deque)来创建一个单调队列以找到滑动窗口的最大值,明确了结果数组的大小,将前k个数都压入队列,然后遍历n - k个数,不断滑动窗口,将nums[i]入队,同时将nums[i - k]出队,在此过程中,使用Deque的push和peek方法来实现。

对于前K个高频元素问题,我使用优先级队列(大根堆)来解决,首先使用HashMap统计每个数字的频率,然后创建一个优先级队列,按照数字的频率进行排序,将频率最高的K个数字放入结果数组并返回,在这个过程中,需要注意处理空指针异常的情况以确保程序的健壮性,同时还需要注意处理结果的格式和类型以确保返回的结果符合题目的要求。

以下是具体的Java代码实现:

Day13|栈与队列03,239. 滑动窗口最大值、347.前 K 个高频元素,Day 13,滑动窗口最大值与前K个高频元素详解——栈与队列的应用实战篇,栈与队列实战详解,滑动窗口最大值与前K个高频元素解析 Day 13特辑 第2张

滑动窗口最大值问题

class Solution {
    public class MonotonicQueue {
        private Deque<Integer> deque = new LinkedList<>();
        
        public void push(int n) {
            // 移除队列中所有小于n的元素
            while (!deque.isEmpty() && deque.peekLast() < n) {
                deque.removeLast();
            }
            deque.push(n);
        }
        
        public int max() {
            return deque.peekFirst(); // 返回队列的最大值,也就是滑动窗口的最大值
        }
    }
    
    // 其他相关代码...
}

前K个高频元素问题

class Solution {
    public int[] topKFrequent(int[] nums, int k) {
        // 使用HashMap统计每个数字的频率
        Map<Integer, Integer> frequencyMap = new HashMap<>();
        for (int num : nums) {
            frequencyMap.merge(num, 1, Integer::sum); // 使用merge方法更新数字的频率
        }
        
        // 创建优先级队列,按照数字的频率进行排序(降序)
        PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(Comparator.comparingInt(frequencyMap::get)); // 使用Comparator创建优先队列,按照频率比较数字的大小(降序)添加数字到优先队列中并维护其大小关系当优先队列中的元素数量超过k时移除频率最低的元素以确保最后的结果数组中只包含前k个高频元素同时还需要注意处理结果的格式和类型以确保返回的结果符合题目的要求,添加数字到优先队列中,如果优先队列中的元素数量超过k个则移除频率最低的元素以确保结果数组中只包含前k个高频元素,最后返回结果数组即可,注意处理空指针异常的情况以确保程序的健壮性,同时还需要注意处理结果的格式和类型以确保返回的结果符合题目的要求,返回结果数组即可,如果优先队列为空则直接返回空数组表示没有前k个高频元素存在如果优先队列中的元素数量小于等于k个则直接将剩余的元素全部添加到结果数组中即可返回结果数组在这个过程中需要注意处理空指针异常的情况因为优先队列可能在某些情况下为空例如输入的数组为空或者输入的数组中没有足够的元素使得优先队列中的元素数量小于k个等等情况都需要进行特殊处理以确保程序的健壮性,同时还需要注意处理结果的格式和类型以确保返回的结果符合题目的要求,添加数字到优先队列中并维护其大小关系当优先队列中的元素数量超过k时移除频率最低的元素最终返回前k个高频元素的数组注意处理空指针异常的情况以确保程序的健壮性同时还需要注意处理结果的格式和类型以确保返回的结果符合题目的要求,如果优先队列为空则返回空数组否则创建一个大小为优先队列当前元素数量的结果数组并将优先队列中的元素依次取出并添加到结果数组中最后返回结果数组即可,在这个过程中需要注意处理空指针异常的情况以防止程序崩溃同时还需要注意处理结果的格式和类型以确保返回的结果符合题目的要求,最后返回结果数组即可。</pre> " 下面是修正后的代码实现: " 以下是修正后的代码实现:```java class Solution { public int[] topKFrequent(int[] nums, int k) { // 使用HashMap统计每个数字的频率 Map<Integer, Integer> frequencyMap = new HashMap<>(); for (int num : nums) { frequencyMap.put(num, frequencyMap.getOrDefault(num, 0) + 1); } // 创建优先级队列,按照数字的频率进行排序(降序) PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(Comparator.comparingInt(frequencyMap::get)); // 将频率最高的k个数字放入优先级队列中 for (int num : frequencyMap.keySet()) { priorityQueue.offer(num); if (priorityQueue.size() > k) { priorityQueue.poll(); // 如果优先

0
收藏0
文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

相关阅读

  • 【研发日记】Matlab/Simulink自动生成代码(二)——五种选择结构实现方法,Matlab/Simulink自动生成代码的五种选择结构实现方法(二),Matlab/Simulink自动生成代码的五种选择结构实现方法详解(二)
  • 超级好用的C++实用库之跨平台实用方法,跨平台实用方法的C++实用库超好用指南,C++跨平台实用库使用指南,超好用实用方法集合,C++跨平台实用库超好用指南,方法与技巧集合
  • 【动态规划】斐波那契数列模型(C++),斐波那契数列模型(C++实现与动态规划解析),斐波那契数列模型解析与C++实现(动态规划)
  • 【C++】,string类底层的模拟实现,C++中string类的模拟底层实现探究
  • uniapp 小程序实现微信授权登录(前端和后端),Uniapp小程序实现微信授权登录全流程(前端后端全攻略),Uniapp小程序微信授权登录全流程攻略,前端后端全指南
  • Vue脚手架的安装(保姆级教程),Vue脚手架保姆级安装教程,Vue脚手架保姆级安装指南,Vue脚手架保姆级安装指南,从零开始教你如何安装Vue脚手架
  • 如何在树莓派 Raspberry Pi中本地部署一个web站点并实现无公网IP远程访问,树莓派上本地部署Web站点及无公网IP远程访问指南,树莓派部署Web站点及无公网IP远程访问指南,本地部署与远程访问实践,树莓派部署Web站点及无公网IP远程访问实践指南,树莓派部署Web站点及无公网IP远程访问实践指南,本地部署与远程访问详解,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南。
  • vue2技术栈实现AI问答机器人功能(流式与非流式两种接口方法),Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法探究,Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法详解
  • 发表评论

    快捷回复:表情:
    评论列表 (暂无评论,0人围观)

    还没有评论,来说两句吧...

    目录[+]

    取消
    微信二维码
    微信二维码
    支付宝二维码