[Mdfs] lc690. 员工的重要性(dfs+bfs+离线询问+问题拓展+基础题)

devtools/2024/11/11 6:11:40/

文章目录

    • 1. 题目来源
    • 2. 题目解析

1. 题目来源

链接:690. 员工的重要性

题单:

2. 题目解析

简单题目,直接 dfs 遍历子树每个节点,累加起来对应的值即可。

拓展:

  • 如果有许多查询情况呢?涉及到离线查询。
  • 那么需要找到根节点。
    • 如何找根?用一个 set 去维护一下,如果当前节点没有父节点,则为根节点。
  • dfs 遍历得到每个节点作为根节点时,子树的重要值总和。
    • 这个需要在回溯的时候进行累加,并非向下递归的时候累加,这个需要注意。

当然,bfs 写法也非常直观,不赘述。


  • 时间复杂度 O ( n ) O(n) O(n)
  • 空间复杂度 O ( 1 ) O(1) O(1)

dfs

class Solution {
public:int getImportance(vector<Employee*> employees, int id) {unordered_map<int, Employee*> g;for (auto e : employees) g[e->id] = e;auto dfs = [&](auto&& dfs, int u) -> int {int res = g[u]->importance;for (auto e : g[u]->subordinates) res += dfs(dfs, e);return res;};return dfs(dfs, id);}
};

/*
// Definition for Employee.
class Employee {
public:int id;int importance;vector<int> subordinates;
};
*/class Solution {
public:int getImportance(vector<Employee*> employees, int id) {unordered_map<int, vector<int>> g;unordered_map<int, int> um;for (auto e : employees) {um[e->id] = e->importance;for (auto ne : e->subordinates) g[e->id].push_back(ne);}int res = 0;queue<int> q;q.push(id);while (!q.empty()) {int u = q.front(); q.pop();res += um[u];for (int v : g[u]) q.push(v);}return res;}
};

拓展:

/*
// Definition for Employee.
class Employee {
public:int id;int importance;vector<int> subordinates;
};
*/class Solution {
public:int getImportance(vector<Employee*> employees, int id) {unordered_map<int, vector<int>> g;unordered_map<int, int> um;set<int> S;for (auto e : employees) {S.insert(e->id);um[e->id] = e->importance;for (auto ne : e->subordinates) g[e->id].push_back(ne), S.erase(ne);}auto dfs = [&](auto&& dfs, int u, int fa) -> void {for (auto e : g[u]) {dfs(dfs, e, u);}if (fa > 0) um[fa] += um[u];};dfs(dfs, *S.begin(), -1);return um[id];}
};

http://www.ppmy.cn/devtools/100774.html

相关文章

领域驱动模型设计与微服务架构落地(三)

1.领域模型 领域模型( domain model ) 是对领域内的概念类或现实世界中对象的可视化表示。 这种官方概念一向是最复杂难以理解的了,其实我们的领域模型在我们的业务当中也有一个名字,叫做 业务对象模型。很明显,我们能够从名字上就能够看出来,我们的业务对象模型是用来…

前端面试宝典【CSS篇】【7】

在前端开发的世界里,每一次面试都是一次机遇,也是一次挑战。 你是否曾因技术深度不够而错失良机? 或是面对最新的技术趋势感到迷茫? 我们的【前端面试宝典】正是为此而来。 由拥有多年一线实战经验的资深工程师亲自授课,结合最新的行业动态与实战案例,旨在全面提升你的技…

Compose 跨页面发送消息使用Channel还是全局ViewModel好?

复杂的app 难免遇到 跨页面传递消息的问题&#xff0c;那么使用 Channel 和全局共享viewModel的形式 对于跨页面传递消息&#xff0c;哪个方案 更好一些呢&#xff1f; AI 回答&#xff1a; 它触及了应用架构设计的核心。让我们比较一下使用 Channel 和全局共享 ViewModel 这…

Java把文件链接转成流,返回给前端下载

背景&#xff1a;已知Java拿到了一个PDF链接&#xff08;http://xxx.xxx.pdf&#xff09;&#xff0c;直接把链接返给前端的话&#xff0c;前端是不能点击直接下载的&#xff0c;需要后端先把url转成文件流&#xff0c;再由前端下载&#xff0c;处理如下&#xff1a; 导入pom&a…

Graylog日志丢失解决方案

问题描述 目前公司使用的日志方案是Graylog5.0版本&#xff0c;当接入的日志并发多时&#xff0c;就会出现日志丢失的情况。 目前硬件系统centos7.9 内核5.16.13。一台graylog和一台es服务器。 两台机器硬件配置 graylog CPU 36C 内存 150G 系统硬盘 500G &#xff08;固态&…

独立开发者系列(44)——PHP的CLI运行模式

所有的编程语言&#xff0c;最开始&#xff0c;测试执行的方式&#xff0c;都是写好xx.xx后缀是各种语言标记&#xff0c;然后使用解释器直接执行&#xff0c;就可以看到hello world。这种执行模式被称之为CLI模式&#xff0c;无需依赖服务器&#xff0c;可以直接跑&#xff0c…

零基础5分钟上手亚马逊云科技-利用MQ为应用解耦

简介&#xff1a; 欢迎来到小李哥全新亚马逊云科技AWS云计算知识学习系列&#xff0c;适用于任何无云计算或者亚马逊云科技技术背景的开发者&#xff0c;通过这篇文章大家零基础5分钟就能完全学会亚马逊云科技一个经典的服务开发架构方案。 我会每天介绍一个基于亚马逊云科技…

软件运维实施维保方案(Doc完整版原件)

1.项目情况 2.服务简述 2.1服务内容 2.2服务方式 2.3服务要求 2.4服务流程 2.5工作流程 2.6业务关系 2.7培训 3.资源提供 3.1项目组成员 3.2服务保障 软件全套资料部分文档清单&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#xff0c;产…