LC刷题专题:dfs、哈希表合集

news2024/10/4 3:07:24

自己刷题缺少分类思想,总是这里刷一道那里刷一道,以后建立几个专辑,然后自己新刷的同类型的题目都会即使更新上。

文章目录

  • 690. 员工的重要性

690. 员工的重要性

2024-10-03
题目描述:
在这里插入图片描述
我第一次写并没有考虑到dfs,首先使用一个哈希表构建 id 和 对应下属的映射关系。并且将此员工的中重要度加入到下述集合中,这样就不需要单独存储一个 Id 对应的重要度,直接根据map映射关系,根据id获取到对应下属映射,此后从下属映射的List集合的最后一个元素就是此员工对应的重要性。
上述操作完成后,联想到二叉树的层状遍历,直接构建了一个双端队列,队列里面存储员工id,之后循环队列即可完成操作。
详细代码如下:

/*
// Definition for Employee.
class Employee {
    public int id;
    public int importance;
    public List<Integer> subordinates;
};
*/

class Solution {
    public int getImportance(List<Employee> employees, int id) {
        int ans = 0;
        HashMap<Integer, List<Integer>> map = new HashMap<>();
        for(Employee employ : employees){
            List<Integer> sub = employ.subordinates;
            if(sub == null){
                sub = new ArrayList<>();
            }
            sub.add(employ.importance);
            map.put(employ.id, sub);
        }
        Deque<Integer> dq = new ArrayDeque<>();
        dq.addLast(id);
        while(!dq.isEmpty()){
            int size = dq.size();
            while(size-- > 0){
                int idx = dq.pollFirst();
                List<Integer> temp = map.get(idx);
                ans += temp.get(temp.size() - 1);
                for(int i = 0; i < temp.size() - 1; i++){
                    dq.addLast(temp.get(i));
                }
            }
        }
        return ans;
    }
}

这种做法是使用迭代代替递归,参考二叉树的做法,上述也可以改写为递归版本的。这个版本参考了题解(灵茶山艾府)的一个版本,供参考:如果此前做过dfs以及二叉树,直接看下面代码非常易懂了。

class Solution {
    public int getImportance(List<Employee> employees, int id) {
        Map<Integer, Employee> employeeMap = new HashMap<>(employees.size());
        for (Employee e : employees) {
            employeeMap.put(e.id, e);
        }
        return dfs(employeeMap, id);
    }

    private int dfs(Map<Integer, Employee> employeeMap, int id) {
        Employee e = employeeMap.get(id);
        int res = e.importance;
        for (int subId : e.subordinates) {
            res += dfs(employeeMap, subId);
        }
        return res;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Arduino的L298N电机驱动模块使用

一.简介&#xff1a; L298N作为电机驱动芯片&#xff0c;具有驱动能力强&#xff0c;发热量低&#xff0c;抗干扰能力强的特点,一个模块可同时驱动两个直流电机工作&#xff0c;能够控制电机进行正转、反转、PWM调速。 说明&#xff1a; 1&#xff09;12V输入端口接入供电电压…

esp32开发环境搭建和烧录测试

文章目录 前言一、硬件环境1、esp32开发板。2、两个micro usb 数据线&#xff0c;一路用于供电&#xff0c;另一路用于烧录和调试3、喇叭&#xff0c; 淘宝上买的 4 欧姆 3 W扬声器 二、软件环境配置1、开发软件2、ESP-IDF简介下载 3、vscode安装配置1、安装vscode2、安装IDF插…

论文提纲怎么写?分享5款AI论文写作软件

在学术研究和写作过程中&#xff0c;撰写高质量的论文是一项挑战性的任务。幸运的是&#xff0c;随着人工智能技术的发展&#xff0c;AI论文写作工具逐渐成为帮助学者和学生提高写作效率的重要工具。这些工具不仅能够提高写作效率&#xff0c;还能帮助简化复杂的写作流程&#…

C++(string类的实现)

1. 迭代器、返回capacity、返回size、判空、c_str、重载[]和clear的实现 string类的迭代器的功能就类似于一个指针&#xff0c;所以我们可以直接使用一个指针来实现迭代器&#xff0c;但如下图可见迭代器有两个&#xff0c;一个是指向的内容可以被修改&#xff0c;另一个则是指…

【JNI】hello world

JNI&#xff0c;作为java和C/C的中间层&#xff0c;为在Java中调用C/C代码提供了便利。作为初学者&#xff0c;这里简单记录学习的过程。 本文所有的操作都在kali linux上进行&#xff0c;jdk环境以及gcc&#xff0c;g编译器需自行提前安装好 操作系统&#xff1a; jdk&#…

行为型模式-命令-迭代-观察者-策略

命令模式 是什么 将一个请求封装成为一个对象, 从而可以使用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及可以撤销的操作 实例 请求封装成为对象 //用来声明执行操作的接口 public abstract class Command { protected Receiver receiver; public Comma…

【网络原理】Udp报文结构,保姆级详解,建议收藏

&#x1f490;个人主页&#xff1a;初晴~ &#x1f4da;相关专栏&#xff1a;计算机网络那些事 一、UDP报文格式 ​ ​ 可以看出UDP报文主要由报头和正文两部分构成&#xff0c;报头存储了此次报文的一些重要信息&#xff0c;而正文才是真正需要传输的内容。本篇文章就主要…

【Kubernetes】常见面试题汇总(五十二)

目录 116. K8S 集群服务暴露失败&#xff1f; 117.外网无法访问 K8S 集群提供的服务&#xff1f; 特别说明&#xff1a; 题目 1-68 属于【Kubernetes】的常规概念题&#xff0c;即 “ 汇总&#xff08;一&#xff09;~&#xff08;二十二&#xff09;” 。 题目 69-…

Windows 环境上安装 NASM 和 YASM 教程

NASM 和 YASM NASM NASM&#xff08;Netwide Assembler&#xff09;是一个开源的、可移植的汇编器&#xff0c;它支持多种平台和操作系统。它可以用来编写16位、32位以及64位的代码&#xff0c;并且支持多种输出格式&#xff0c;包括ELF、COFF、OMF、a.out、Mach-O等。NASM使用…

复习HTML(进阶)

前言 上一篇的最后我介绍了在表单中&#xff0c;上传文件需要使用到 method属性 和enctype属性。本篇博客主要是详细的介绍这些知识 <form action"http://localhost:8080/test" method"post" enctype"multipart/form-data"> method属性…

SQL Inject-基于报错的信息获取

常用的用来报错的函数 updatexml() : 函数是MYSQL对XML文档数据进行查询和修改的XPATH函数。 extractvalue(): 函数也是MYSQL对XML文档数据进行查询的XPATH函数。 floor(): MYSQL中用来取整的函数。 思路&#xff1a; 在MySQL中使用一些指定的函数来制造报错&am…

YOLOv8改进 - 注意力篇 - 引入SEAttention注意力机制

一、本文介绍 作为入门性篇章&#xff0c;这里介绍了SEAttention注意力在YOLOv8中的使用。包含SEAttention原理分析&#xff0c;SEAttention的代码、SEAttention的使用方法、以及添加以后的yaml文件及运行记录。 二、SEAttention原理分析 SEAttention官方论文地址&#xff1…

深度学习——线性神经网络(一、线性回归)

目录 一、线性回归1.1 线性回归的基本元素1.1.1 术语介绍1.1.2 线性模型1.1.3 损失函数1.1.4 解析解1.1.5 随机梯度下降1.1.6 模型预测 1.2 正态分布与平方损失 因为线性神经网络篇幅比较长&#xff0c;就拆成几篇博客分开发布。目录序号保持连贯性。 一、线性回归 回归&#x…

基于单片机智能百叶窗卷帘门自动门系统

** 文章目录 前言概要功能设计设计思路 软件设计效果图 程序文章目录 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师&#xff0c;一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对…

二叉树深度学习——将二叉搜索树转化为排序的双向链表

1.题目解析 题目来源&#xff1a;LCR 155.将二叉搜索树转化为排序的双向链表 测试用例 2.算法原理 首先题目要求原地进行修改并且要求左指针代表前驱指针&#xff0c;右指针代表后继指针&#xff0c;所以思路就是 1.使用前序遍历创建两个指针cur、prev代表当前节点与前一个节点…

STM32三种启动模式:【详细讲解】

STM32在上电后&#xff0c;从那里启动是由BOOT0和BOOT1引脚的电平决定的&#xff0c;如下表&#xff1a; BOOT模式选引脚启动模式BOOT0BOOT1X0主Flash启动01系统存储器启动11内置SRAM启动 BOOT 引脚的值在重置后 SYSCLK 的第四个上升沿时被锁定。在重置后,由用户决定是如何设…

硬件开发笔记(三十):TPS54331电源设计(三):设计好的原理图转设计PCB布板,12V输入电路布局设计

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/142694484 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

挖矿病毒记录 WinRing0x64.sys

之前下载过福晰pdf编辑器&#xff0c;使用正常。 某天发现机器启动后&#xff0c;过个几分钟(具体为5min)会自动运行几个 cmd 脚本(一闪而过)&#xff0c;但是打开任务管理器没有发现异常程序&#xff08;后面发现病毒程序伪装成System系统程序&#xff0c;见下图&#xff09;…

Ascend C算子加速:优化与创新

Ascend C算子加速&#xff1a;优化与创新 随着大模型的迅速发展和人工智能计算需求的剧增&#xff0c;优化硬件性能变得尤为重要。针对这一需求&#xff0c;昇腾推出了Ascend Operator Library&#xff08;AOL&#xff09;算子加速库&#xff0c;专注于为开发者提供高效的算子…

C++-vector模拟实现

###vector底层相当于是数组&#xff0c;查看源码可以发现&#xff0c;这个类的私有成员变量是三个迭代器&#xff1b;在实现时迭代器就可以当作是vector里面的元素的指针类型&#xff1b; ###vector是一个类模板&#xff0c;实现时也应当按照这样的写法用一个模板去实现&#…