day11|150,239,347

news/2024/12/22 20:47:49 标签: 算法, leetcode, 职场和发展

150

其实不难,理解规律,遇到符号就需要提出来做运算。

class Solution {
    public int evalRPN(String[] tokens) {
        //向零截断,正数向下取整,负数向上取整
        //Queue<Integer> num = new Queue<>();是错的注意区别
        Deque<Integer> num = new LinkedList<>();//名称用stack更好
        int len = tokens.length;
        //for(String s: tokens)更好
        for(int i = 0; i < len; i++){
            //不能使用==判断字符串是否相等
            if("*".equals(tokens[i])){
                int num1 = num.pop();
                int num2 = num.pop();
                num.push(num1 * num2);
            }else if("/".equals(tokens[i])){
                int num1 = num.pop();
                int num2 = num.pop();
                num.push(num2 / num1);
            }else if(tokens[i].equals("-")){
                int num1 = num.pop();
                int num2 = num.pop();
                num.push(num2 - num1);
            }else if(tokens[i].equals("+")){
                int num1 = num.pop();
                int num2 = num.pop();
                num.push(num2 + num1);
            }else{
                //用valueOf=也可以
                num.push(Integer.parseInt(tokens[i]));
            }
        }
        return num.pop();
    }
}

补充1:java中除法取整

在Java中,整数除法的结果是向下取整的。这意味着当两个整数相除时,结果会舍弃小数部分,只保留整数部分。

符合题目中说的从零取整。


239

感觉不太难,试做一下。

有点难,当最大值失效时,下一个最大值是多少呢。

好难,学习一下。

class Solution {
    public int[] maxSlidingWindow(int[] nums, int k) {
        //这个题目的问题在于,在左移的时候最大值能否保留,如何找到次大值
        //单调队列
        Deque<Integer> deque = new LinkedList<>();
        int n = nums.length;
        
        int[] res = new int[n - k + 1];
        for(int i = 0; i < n; i++){
            //先删前再删后
            while(!deque.isEmpty() && deque.peek() < i - k + 1){
                deque.poll();//头部弹出
            }

            while(!deque.isEmpty() && nums[deque.peekLast()] < nums[i]){
                deque.pollLast();//找到最大值
            }

            deque.offer(i);

            if(i >= k - 1){
                res[i - k + 1] = nums[deque.peek()];
            }
        }
        return res;
    }
}

补充1:单调队列

维护元素单调递减的队列就叫做单调队列,即单调递减或单调递增的队列。

理解体内的单调队列具体存的什么值,它不是数组,存的仅仅是当前这个i的最大值。

详细来说在这个队列中每次加入的新值,是,以这个下标i为起头,在不知道后面的情况下的可能是最大值的下标, 但i现在不一定是起头,所以只是存储起来。

补充2:思路

为了维护当前区间的最大值,所以需要进行比较,确保队列中的数据是在区间内的,所以有第一个循环函数。

第二个函数,则是在新加入值后,以这个下标i为结尾的k可能的最大值,那现在在队列中比我小的值就需要删掉了。这就是第二个循环函数的作用。

两个函数的作用下,最后留在队头的就是我们的答案。

补充3:双端队列的函数

这里右边是头,左边是尾

poll(), peek(), offer()

pollLast(), peekLast()


347

想法是用最大堆维护就好了。

先遍历一遍所有数据统计出现次数,然后再加入最大堆取前k个。

思路没问题,主要语法不熟,多复习!

class Solution {
    public int[] topKFrequent(int[] nums, int k) {
        Map<Integer, Integer> frequence = new HashMap<>();
        for(int num: nums){
            //写法! 错的frequence.push(num, frequence.getBy(num) ++);
           
            frequence.put(num, frequence.getOrDefault(num, 0) + 1);
        }

        //为什么是数组?
        //最大根,重要,难写!
        PriorityQueue<int[]> pri = new PriorityQueue<>((pair1, pair2) -> {
            return pair2[1] - pair1[1];
        });

        //注意遍历写法 错for(Map<Integer, Integer> map : frequence)
        for(Map.Entry<Integer, Integer> map : frequence.entrySet()){
            //哪些用add哪些用Put
            //堆怎么add,哪些参数,怎么获得
            pri.add(new int[]{map.getKey(), map.getValue()});
        }

        int[] ans = new int[k];
        for(int i = 0; i < k ; i++){
            哪些用pop哪些用poll
            int[] pair = pri.poll();
            ans[i] = pair[0];
        }

        return ans;
    }
}


http://www.niftyadmin.cn/n/5795847.html

相关文章

数据结构:链表(经典算法例题)详解

目录 1.移除链表元素 2.反转链表 3.链表的中间结点 4.合并两个有序链表 5.环形链表的约瑟夫问题 6.分割链表 我以过客之名&#xff0c;祝你前程似锦 1.移除链表元素 &#xff08;1&#xff09;题目&#xff1a; https://leetcode.cn/problems/remove-linked-list-element…

Vue3 基础记录

Vue3 创建 基于vue-cli ## 查看vue/cli版本&#xff0c;确保vue/cli版本在4.5.0以上 vue --version## 安装或者升级你的vue/cli npm install -g vue/cli## 执行创建命令 vue create vue_test## 随后选择3.x ## Choose a version of Vue.js that you want to start the pr…

Golang学习历程【第三篇 基本数据类型类型转换】

Golang学习历程【第三篇 基本数据类型】 1. 总览2. 基本数据类型2.1 整型2.2 浮点型2.2 布尔型2.3 字符2.4 字符串2.4.1 常用定义方式2.4.2 转移字符2.4.3 常用方法2.4.3 字符串中字符替换 3. 类型转换3.1 整型与整型转化3.2 浮点数与整型转换3.3 其他类型与string类型转换3.4 …

亚马逊API接口深度解析:如何高效获取商品详情与评论数据

在当今数字化时代&#xff0c;电商平台的数据对于商家和开发者来说至关重要。亚马逊作为全球领先的电商平台&#xff0c;其API接口为开发者提供了丰富的商品信息和评论数据。本文将深入探讨如何使用亚马逊API接口获取商品详情和商品评论&#xff0c;同时提供简洁明了的使用方法…

代码随想录算法训练营第十一天-239.滑动窗口最大值

解题思想与代码实现&#xff0c;令人叹为观止队列的最佳应用从总体上讲&#xff0c;完成代码的思路是非常清晰的 根据窗口大小&#xff0c;从源数据第一个开始&#xff0c;把数据依次压入队列中从压入队列的数据中找出最大值&#xff0c;放入结果集合中再将队列中第一个元素弹出…

保姆级教程Docker部署RabbitMQ镜像

目录 1、创建挂载目录 2、运行RabbitMQ容器 3、Compose运行RabbitMQ容器 4、开启界面插件 5、查看RabbitMQ运行状态 6、常见问题处理 1、创建挂载目录 # 创建宿主机rabbitMQ挂载目录 sudo mkdir -p /data/docker/rabbitmq/log# 修改log目录权限 sudo chmod 777 /data/do…

HTML 新手易犯的标签属性设置错误

滥用target"_blank"属性&#xff1a;将所有链接的目标设为_blank会在新标签页中打开链接&#xff0c;这可能会导致用户在不知情的情况下打开大量新标签页&#xff0c;影响用户体验。正确的做法是只在需要新标签页打开的链接上使用该属性&#xff0c;并在标签中添加适…

在UE5中调用ImGui图形界面库

ImGui是一个小巧灵活、简洁美观的图形界面库 首先我们直接参考Github https://github.com/SLSNe/Unreal5-ImGui 把项目下载下来后 打开项目目录或者引擎目录 项目根目录/Plugins/ImGui/ 或 UE5引擎根目录/Engine/Plugins/ 如果没有Plugins文件夹就新建一个 把项目放里面…