算法day27

第一题

515. 在每个树行中找最大值

        首先是遍历每层的节点,将每一层最大值的节点的值保留下来,最后将所有层的最大值的表返回;具体的遍历每层节点的过程如上一篇故事;

综上所述,代码如下:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<Integer> largestValues(TreeNode root) {
        List<Integer> ret = new ArrayList<>();
        if(root== null) return ret;
        Queue<TreeNode> q = new LinkedList<>();
        q.add(root);
        while(!q.isEmpty()){
            int size = q.size();
            int tmp = Integer.MIN_VALUE;
            for(int i = 0;i<size;i++){
                TreeNode t = q.poll();
                tmp = Math.max(tmp,t.val);
                if(t.left != null)q.add(t.left);
                if(t.right != null) q.add(t.right);
            }
            ret.add(tmp);
        }
        return ret;
    }
}

第二题

1046. 最后一块石头的重量

实例分析:

        我们采用堆的解题方法;

        创建一个大根堆,把所有的元素放入到大根堆里面;

        每次返回堆顶的两个元素,得到两个数的差值在进入到大根堆里面;

        最后只要大根堆的里面有元素就一直重复出堆相减的操作;

        返回最后的数值即可;

综上所述,代码如下:

class Solution {
    public int lastStoneWeight(int[] stones) {
        //1、创建一个大根堆
        PriorityQueue<Integer> heap = new PriorityQueue<>((a,b) -> b-a);
        //2、把所有的石头放进堆里里面
        for(int x :stones){
            heap.offer(x);
        }
        //3、模拟
        while(heap.size()>1){
            int a = heap.poll();
            int b = heap.poll();
            if(a > b ){
                heap.offer(a-b);
            }
        }
        return heap.isEmpty()?0:heap.peek();
    }
}

第三题

703. 数据流中的第 K 大元素

本题是top-k模型,解题思路如下所示:

        创建一个长度为k的小根堆,然后开始往里面加入元素,一直等加入元素后小根堆的长度大于k值时,我们进行出堆操作,即将小根堆顶部的元素退出去,在进行入堆操作,就这样一直重复操作,直到所有的元素都进行过入堆操作,这时候返回的堆顶的元素即是我们所求;

        综上所述,代码如下:

class KthLargest {
    PriorityQueue<Integer> heap;
    int k1;

    public KthLargest(int k, int[] nums) {
        k1 = k;
        heap = new PriorityQueue<>();
        for(int x : nums){
            heap.offer(x);
            if(heap.size() > k1){
                heap.poll();
            }
        }
    }
    
    public int add(int val) {
        heap.offer(val);
        if(heap.size() > k1){
            heap.poll();
        }
        return heap.peek();
    }
}

/**
 * Your KthLargest object will be instantiated and called as such:
 * KthLargest obj = new KthLargest(k, nums);
 * int param_1 = obj.add(val);
 */

第四题

692. 前K个高频单词

解法:本题利用堆来解决top-k问题;

步骤:

步骤一:

        预处理一下原始的字符串数组,即用一个hash表统计一下每一个单词出现的频次;

步骤二:

        创建一个大小为k的堆:

        频次不同:小根堆

        频次相同时创建大根堆(字典序)

步骤三:

        开始循环操作:

        让元素依次进堆,判断条件,如果不满足条件的话就进行堆顶的元素出堆操作

步骤四:

        根据实际情况对元素进行逆序操作

        综上所述,代码如下:

class Solution {
    public List<String> topKFrequent(String[] words, int k) {
        //1、统计一下每一个单词出现的次数
        Map<String,Integer> hash = new HashMap<>();
        for(String s: words){
            hash.put(s,hash.getOrDefault(s,0)+1);
        }
        //2、创建一个大小为k的堆
        PriorityQueue<Pair<String,Integer>> heap = new PriorityQueue<>
        (
            (a,b) -> {
                if(a.getValue().equals(b.getValue()))//出现频次相同的时候,字典按照大根堆的顺序排列
                {
                    return b.getKey().compareTo(a.getKey());
                }
                return a.getValue() - b.getValue();
            }
        );
        //3、top-k的主逻辑
        for(Map.Entry<String,Integer> e : hash.entrySet()){
            heap.offer(new Pair<>(e.getKey(),e.getValue()));
            if(heap.size() > k){
                heap.poll();
            }
        }
        //4、提取结果
        List<String> ret = new ArrayList<>();
        while(!heap.isEmpty()){
            ret.add(heap.poll().getKey());
        }
        //逆序数组
        Collections.reverse(ret);
        return ret;
    }
}

ps:本次的内容就到这里了,如果对你有所帮助的话就请一键三连哦!!! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/707464.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HTML静态网页成品作业(HTML+CSS)—— 零食商城网页(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品演示 三、代…

同三维T80005EH4 H.265 4路高清HDMI编码器

同三维T80005EH4 H.265 4路高清HDMI编码器 4路HDMI输入2路3.5音频输入&#xff0c;第1路和第2路HDMI可支持4K30&#xff0c;其它支持高清1080P60 产品简介&#xff1a; 同三维T80005EH4 4路HDMI高清H.265编码器采用最新高效H.265高清数字视频压缩技术&#xff0c;具备稳定…

SQL Server 2022 RTM 最新累积更新:Cumulative Update #13 for SQL Server 2022 RTM

SQL Server 2022 RTM (最新累积更新) - 基于 Azure 的持续性能和安全创新 Cumulative Update #13 for SQL Server 2022 RTM 请访问原文链接&#xff1a;https://sysin.org/blog/sql-server-2022/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&…

C++笔记:模板

模板 为什么要学习模板编程 在学习模板之前&#xff0c;一定要有算法及数据结构的基础&#xff0c;以及重载&#xff0c;封装&#xff0c;多态&#xff0c;继承的基础知识&#xff0c;不然会出现看不懂&#xff0c;或者学会了没办法使用。 为什么C会有模板&#xff0c;来看下面…

听说前端都是切图仔,所以学了PS

PS 从零开始-基础篇 什么话都不想说了&#xff0c;前端以死后端已死&#xff0c;毁灭即是新生&#xff0c;我要开始追梦了&#xff0c; 从小就希望&#xff0c;制作一款自己的游戏&#x1f3ae;去学了编程&#xff0c;了解了&#xff1a;Java、C#、前端... 不小心入了web领域…

idea 配置文件中文乱码

再进行springboot项目开发时发现新建的配置文件中文注释乱码&#xff0c;如下: 处理办法: 1、打开idea&#xff0c;在 File 中找到 Settings,如下图 2、搜索 encodings 找到 File Encodings&#xff0c;如下图 3、将上图中圈上的地方全部改为 UTF-8 编码最后点击 Apply 应用即…

10 SpringBoot 静态资源访问

我们在开发Web项目的时候&#xff0c;往往会有很多静态资源&#xff0c;如html、图片、css等。那如何向前端返回静态资源呢&#xff1f; 以前做过web开发的同学应该知道&#xff0c;我们以前创建的web工程下面会有一个webapp的目录&#xff0c;我们只要把静态资源放在该目录下…

后端跨域问题的处理

问题描述 在做前后端分离的项目时&#xff0c;很有可能会遇到这样一种情况&#xff1a; 就是在游览器中请求后端的接口&#xff0c;出现了 CORS error 错误 报错信息如下&#xff1a; Access to XMLHttpRequest at http://localhost:8860/user/auth/login from origin http:…

MySQL 用户权限管理:授权、撤销、密码更新和用户删除(图文解析)

目录 前言1. 授予权限2. 撤销权限3. 查询权限4. Demo 前言 公司内部的数据库权限一般针对不同人员有不同的权限分配&#xff0c;而不都统一给一个root权限 1. 授予权限 授予用户权限的基本命令是GRANT 可以授予的权限种类很多&#xff0c;涵盖从数据库和表级别到列和存储过…

郑州申请大气污染防治乙级资质,这些材料必不可少

在郑州申请大气污染防治乙级资质时&#xff0c;以下材料是必不可少的&#xff1a; 一、企业基础资料&#xff1a; 企业法人营业执照副本&#xff1a;需清晰&#xff0c;且在有效期内[1][2]。企业章程&#xff1a;提交企业章程的扫描件或复印件&#xff0c;以展示企业的组织结构…

183.二叉树:二叉搜索树中的众数(力扣)

代码解决 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* Tre…

农资投入品系统架构:数字化农业的技术支撑与创新

在当今数字化时代&#xff0c;农业领域也在迅速迈向数字化和智能化的新阶段。农资投入品系统作为农业生产的重要支撑&#xff0c;其系统架构的设计与创新对于提高农业生产效率、保障粮食安全具有重要意义。本文将探讨农资投入品系统架构的设计原则、核心模块以及未来发展趋势。…

实例化游戏物体的实例(生成游戏物体)

一、实例1&#xff1a;实例化 1、准备工作&#xff1a;制备预制体&#xff0c;命名。如Circle 2、Create Empty&#xff0c;名字自取。如&#xff1a;CirclePrefab 3、给CirclePrefab添加Test.cs public GameObject CirclePrefab; // 预制体变量&#xff0c;用于存储Circle预…

湖南安全技术职业学院校长邓德艾一行到我中心考察交流

6月4日上午&#xff0c;湖南安全技术职业学院校长邓德艾一行莅临方班网安人才教育服务中心交流研讨&#xff0c;一方面是访企拓岗&#xff0c;另一方面是针对产教融合、政校企合作人才培养展开深入研讨。为将本次研讨进行得更深入全面&#xff0c;方班网安人才教育服务中心邀请…

C++17并行算法与HIPSTDPAR

C17 parallel algorithms and HIPSTDPAR — ROCm Blogs (amd.com) C17标准在原有的C标准库中引入了并行算法的概念。像std::transform这样的并行版本算法保持了与常规串行版本相同的签名&#xff0c;只是增加了一个额外的参数来指定使用的执行策略。这种灵活性使得已经使用C标准…

AI数字人的开源解决方案

目前&#xff0c;国内外已经涌现出一些优秀的数字人开源解决方案&#xff0c;这些解决方案为开发者提供了构建数字人应用的工具和基础设施。以下是一些比较知名的数字人开源解决方案。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1…

Sklearn中逻辑回归建模

分类模型的评估 回归模型的评估方法&#xff0c;主要有均方误差MSE&#xff0c;R方得分等指标&#xff0c;在分类模型中&#xff0c;我们主要应用的是准确率这个评估指标&#xff0c;除此之外&#xff0c;常用的二分类模型的模型评估指标还有召回率&#xff08;Recall&#xff…

振弦采集仪在隧道工程中的安全监测与控制研究

振弦采集仪在隧道工程中的安全监测与控制研究 隧道工程的安全监测与控制是保障隧道施工和运营安全的重要工作。隧道工程常面临的问题包括地层变形、地下水位变化、地震影响等&#xff0c;这些问题对隧道结构的安全性和使用寿命有着重要影响。因此&#xff0c;隧道工程中的安全…

JVM性能优化案例:减少对象频繁创建

JVM性能优化案例&#xff1a;减少对象频繁创建 案例背景 某金融应用系统在处理大量并发交易时&#xff0c;响应时间过长&#xff0c;并且有时出现内存溢出&#xff08;OutOfMemoryError&#xff09;的问题。经过分析&#xff0c;发现问题主要出在频繁的对象创建和较差的内存管…

OpenCV查找图像中的轮廓并且展示

1、查找轮廓随机用不同的颜色画出 import cv2 import numpy as npdef get_contour_colors(num_contours):# 定义颜色表 (BGR 格式)colors [(255, 0, 0),(255, 50, 0),(255, 100, 0),(255, 150, 0),(255, 200, 0),(255, 255, 0),(200, 255, 0),(150, 255, 0),(100, 255, 0),(5…