被字节恶心到了

字节

日常逛 xhs 看到一篇吐槽贴,表示被公司恶心到了:

alt

这位网友表示,最近是公司举办了 Q2 和 H1 的优秀员工表彰,自己的 +1(直属领导)评上了,但仔细一看,+1 获奖的所有产出都是自己的,对此表示十分生气。

重点在于,该网友认为自己的 +1 没有提供过指导帮助(对其他下属也是),自己的产出完全是靠自己闭环,直言不知道这个优秀员工 +1 能不能拿到安心。

这事儿怎么说呢,其实在职场十分常见,也不好评这是不是对的。

有句话不知道大家听过没有:完成本职工作其实就是完成领导的 KPI。

至于"+1 没有提供指导帮助",这个属实不应该,那不是纯纯成了邀功了吗。

对此你怎么看?你有过类似经历吗?你在公司算是"嫡系"吗?欢迎评论区交流。

...

回归主题。

来一道和「唠嗑」高度贴合的算法题。

题目描述

平台:LeetCode

题号:690

给定一个保存员工信息的数据结构,它包含了员工唯一的 id ,重要度和直系下属的 id 。

比如,员工 1 是员工 2 的领导,员工 2 是员工 3 的领导。他们相应的重要度为 15 , 10 , 5 。

那么员工 1 的数据结构是 [1, 15, [2]],员工 2的 数据结构是 [2, 10, [3]],员工 3 的数据结构是 [3, 5, []]

注意虽然员工 3 也是员工 1 的一个下属,但是由于并不是直系下属,因此没有体现在员工 1 的数据结构中。

现在输入一个公司的所有员工信息,以及单个员工 id,返回这个员工和他所有下属的重要度之和。

示例:

输入:[[1, 5, [2, 3]], [2, 3, []], [3, 3, []]], 1

输出:11

解释:
员工 1 自身的重要度是 5 ,他有两个直系下属 2 和 3 ,而且 2 和 3 的重要度均为 3 。因此员工 1 的总重要度是 5 + 3 + 3 = 11 。

提示:

  • 一个员工最多有一个直系领导,但是可以有多个直系下属
  • 员工数量不超过 2000

递归 / DFS

一个直观的做法是,写一个递归函数来统计某个员工的总和。

统计自身的 importance 值和直系下属的 importance 值。同时如果某个下属还有下属的话,则递归这个过程。

Java 代码:

class Solution {
    Map<Integer, Employee> map = new HashMap<>();
    public int getImportance(List<Employee> employees, int id) {
        int n = employees.size();
        for (int i = 0; i < n; i++) map.put(employees.get(i).id, employees.get(i));
        return getVal(id);
    }
    int getVal(int id) {
        Employee master = map.get(id);
        int ans = master.importance;
        for (int oid : master.subordinates) {
            Employee other = map.get(oid);
            ans += other.importance;
            for (int sub : other.subordinates) ans += getVal(sub);
        }
        return ans;
    }
}

C++ 代码:

class Solution {
public:
    unordered_map<int, Employee*> map;
    int getImportance(vector<Employee*>& employees, int id) {
        for (auto employee : employees) map[employee->id] = employee;
        return getVal(id);
    }
    int getVal(int id) {
        Employee* master = map[id];
        int ans = master->importance;
        for (int oid : master->subordinates) {
            Employee* other = map[oid];
            ans += other->importance;
            for (int sub : other->subordinates) ans += getVal(sub);
        }
        return ans;
    }
};

Python 代码:

class Solution:
    def __init__(self):
        self.mapping = {}

    def getImportance(self, employees, id):
        for emp in employees:
            self.mapping[emp.id] = emp
        return self.getVal(id)

    def getVal(self, id):
        master = self.mapping[id]
        ans = master.importance
        for oid in master.subordinates:
            other = self.mapping[oid]
            ans += other.importance
            for sub in other.subordinates:
                ans += self.getVal(sub)
        return ans

TypeScript 代码:

map: Map<number, Employee>;
function getImportance(employees: Employee[], id: number): number {
    this.map = new Map();
    employees.forEach(emp => this.map.set(emp.id, emp));
    return getVal(id);
};
function getVal(id: number): number {
    const master = this.map.get(id);
    let ans = master.importance;
    for (const oid of master.subordinates) {
        const other = this.map.get(oid);
        ans += other.importance;
        for (const sub of other.subordinates) ans += getVal(sub);
    }
    return ans;
}
  • 时间复杂度:
  • 空间复杂度:

迭代 / BFS

另外一个做法是使用「队列」来存储所有将要计算的 Employee 对象,每次弹出时进行统计,并将其「下属」添加到队列尾部。

class Solution {
    public int getImportance(List<Employee> employees, int id) {
        int n = employees.size(), ans = 0;
        Map<Integer, Employee> map = new HashMap<>();
        for (int i = 0; i < n; i++) map.put(employees.get(i).id, employees.get(i));
        Deque<Employee> d = new ArrayDeque<>();
        d.addLast(map.get(id));
        while (!d.isEmpty()) {
            Employee poll = d.pollFirst();
            ans += poll.importance;
            for (int oid : poll.subordinates) d.addLast(map.get(oid));
        }
        return ans;
    }
}

C++ 代码:

class Solution {
public:
    int getImportance(vector<Employee*> employees, int id) {
        int n = employees.size(), ans = 0;
        unordered_map<int, Employee*> map;
        for (int i = 0; i < n; i++) map[employees[i]->id] = employees[i];
        deque<Employee*> d;
        d.push_back(map[id]);
        while (!d.empty()) {
            Employee* poll = d.front();
            d.pop_front();
            ans += poll->importance;
            for (int oid : poll->subordinates) d.push_back(map[oid]);
        }
        return ans;
    }
};

Python 代码:

class Solution:
    def getImportance(self, employees: List['Employee'], id: int) -> int:
        n, ans = len(employees), 0
        mapping = {emp.id: emp for emp in employees}        
        d = []
        d.append(mapping[id])
        while d:
            poll = d.pop(0)
            ans += poll.importance
            for oid in poll.subordinates:
                d.append(mapping[oid])
        return ans

TypeScript 代码:

function getImportance(employees: Employee[], id: number): number {
    const map = new Map(employees.map(emp => [emp.id, emp]));
    let ans = 0;
    const d: Employee[] = [];
    d.push(map.get(id));
    while (d.length) {
        const poll = d.shift();
        ans += poll.importance;
        for (const oid of poll.subordinates) d.push(map.get(oid));
    }
    return ans;
};
  • 时间复杂度:
  • 空间复杂度:

最后

巨划算的 LeetCode 会员优惠通道目前仍可用 ~

使用福利优惠通道 leetcode.cn/premium/?promoChannel=acoier,年度会员 有效期额外增加两个月,季度会员 有效期额外增加两周,更有超大额专属 🧧 和实物 🎁 福利每月发放。

我是宫水三叶,每天都会分享算法知识,并和大家聊聊近期的所见所闻

欢迎关注,明天见。

更多更全更热门的「笔试/面试」相关资料可访问排版精美的 合集新基地 🎉🎉

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实时数字人DH_live使用案例

参看: https://github.com/kleinlee/DH_live ubuntu 测试 apt install ffmpeg 下载安装: git clone https://github.com/kleinlee/DH_live.git cd DH_liveconda create -n dh_live python=3.12 conda activate dh_live pip install -r requirements.txt pip install torch …

突发:Sam万字长文,OpenAI o1超越人类,o1模型训练原理、微调、能力来源-AI已死,大模型当立

OpenAl o1大模型&#xff1a;原理、突破、前景及影响 北京时间2024年9月13日凌晨&#xff0c;OpenAI正式发布了新的人工智能模型o1&#xff08;o是orion猎户座&#xff0c;1代表从头再来&#xff0c;也意味着后续将出现更多序列&#xff09;&#xff0c;就是此前OpenAI一直在高…

银河麒麟V10 SP1如何进入救援模式?

银河麒麟V10 SP1如何进入救援模式&#xff1f; 1、准备工作2、进入BIOS/UEFI进入救援模式注意事项 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在使用银河麒麟高级服务器操作系统V10 SP1时&#xff0c;如果遇到系统无法正常启动或需要进…

240 搜索二维矩阵 II

解题思路&#xff1a; \qquad 解这道题最重要的是如何利用从左到右、从上到下为升序的性质&#xff0c;快速找到目标元素。 \qquad 如果从左上角开始查找&#xff0c;如果当前matrix[i][[j] < target&#xff0c;可以向右、向下扩展元素都是升序&#xff0c;但选择哪个方向…

.Net 6.0 监听Windows网络状态切换

上次发了一个文章获取windows网络状态&#xff0c;判断是否可以访问互联网。传送门&#xff1a;获取本机网络状态 这次我们监听网络状态切换&#xff0c;具体代码如下&#xff1a; public class WindowsNetworkHelper {private static Action<bool>? _NetworkStatusCh…

初步认识产品经理

产品经理 思考问题的维度 1️⃣为什么要抓住核心用户&#xff1f; 所有和产品有关系的群体就是用户&#xff0c;存在共性和差异了解用户的付费点&#xff0c;更好的优化产品是否使用&#xff1a;&#xff08;目标用户-已使用产品&#xff1a;种子用户-尝鲜&#xff1b;核心用…

【在Linux世界中追寻伟大的One Piece】命名管道

目录 1 -> 命名管道 1.1 -> 创建一个命名管道 1.2 -> 匿名管道与命名管道的区别 1.3 -> 命名管道的打开规则 1.4 -> 例子 1 -> 命名管道 管道应用的一个限制就是只能在具有共同祖先(具有亲缘关系)的进程间通信。如果我们想在不相关的进程之间交换数据&…

C++多重继承

C多重继承 一个类可以从多个类继承&#xff0c;只需在类的基类列表中&#xff08;即冒号后&#xff09;指定更多的基类&#xff0c;用逗号分隔即可。例如&#xff0c;如果程序有一个名为Output的特定类要在屏幕上打印&#xff0c;我们希望派生类Rectangle&#xff08;长方形&a…

Netgear-WN604 downloadFile.php 信息泄露复现(CVE-2024-6646)

0x01 产品描述&#xff1a; NETGEAR WN604是一款功能强大的双频AC1200无线路由器,非常适合中大型家庭和企业使用。它支持最新的802.11ac无线标准,能提供高达1200Mbps的无线传输速度。路由器具备千兆有线网口和3个100Mbps有线网口,可满足有线和无线设备的接入需求。此外,它还内置…

JavaWeb——Vue组件库Element(5/6):案例:组件实现(概述、Form表单、Table表格、Pagination 分页、效果展示、完整代码)

目录 概述 Form表单 Table表格 Pagination 分页 效果展示 完整代码 概述 在刚才制作出来的页面当中&#xff0c;上面项目的名称已制作好&#xff0c;左侧的菜单栏也已配置好。 接下来主要处理的是右侧主展示区域当中的组件编写。 在右侧的主展示区域&#xff0c;主要有…

java版鸿鹄电子招投标系统功能架构设计 核心功能设计 鸿鹄电子招投标采购系统源码

java版鸿鹄电子招投标系统功能架构设计 核心功能设计 鸿鹄电子招投标采购系统源码

数据结构--绪论

1.数据结构的基本概念 1.1数据结构基本概念以及术语 &#xff08;1&#xff09;数据结构是相互之间存在一种或多种特定关系的数据元素的集合。 &#xff08;2&#xff09;数据对象是具有相同性质的数据元素的集合&#xff0c;是数据的一个子集。 &#xff08;3&#xff09;数…

sql server每天定时执行sql语句

sql server每天定时执行sql语句 1、打开SQL Server Management Studio 2、鼠标右击【SQL Server 代理】&#xff0c;选择【启动(S)】&#xff0c;如已启动&#xff0c;可以省略此步骤&#xff1b; 3、右键&#xff0c;新建-》作业&#xff0c;在作业上-》新建作业&#xff…

《RabbitMQ篇》基本概念介绍

MQ功能 解耦 MQ允许不同系统或组件之间松散耦合。发送者和接收者不需要直接连接&#xff0c;从而提高了系统的灵活性和可维护性。异步处理 使用MQ可以实现异步消息传递&#xff0c;发送者可以将消息放入队列后立即返回&#xff0c;不必等待接收者处理。这提高了系统的响应速度…

【STM32单片机_(HAL库)】4-5-1【定时器TIM】【感应开关盖垃圾桶】SG90舵机模块实验

1.硬件 STM32单片机最小系统SG90舵机模块 2.软件 sg90驱动文件添加main.c程序 #include "sys.h" #include "delay.h" #include "led.h" #include "sg90.h"int main(void) {HAL_Init(); /* 初始化HAL库 */…

Linux命令大全及小例子

撰写一份关于Linux命令大全的详尽报道和分析是一项重要的任务&#xff0c;旨在让读者全面了解Linux命令的用途和应用场景。Linux系统因其强大的命令行工具而闻名&#xff0c;无论是系统管理、文件操作还是网络配置&#xff0c;Linux命令行都提供了灵活且强大的解决方案。以下是…

QT学习笔记2.2(安装部署_编译器)

QT学习笔记2.2&#xff08;安装部署_编译器) 编译器的版本&#xff0c;32位64位的 目前只用32位vs编译过&#xff0c;其他的还没有搞过。 一直没有搞清楚qt qtcreator 生成软件&#xff0c;32位和64位之间的关系 目前只使用32位qt生成打包了32位的项目。 编译器的安装 …

SAP HCM 抓取模拟工资核算日志RT表数据

一&#xff1a;故事背景 SAP的核算其实比较麻烦的就是没地方可以导出核算成功的人员编号&#xff0c;即使能导出也是树形的结构&#xff0c;需要反复加工多次才能整理好员工&#xff0c;所以非常麻烦&#xff0c;今天就想能不能抓取模拟工资的rt表数据. 二&#xff1a;解决办法…

ASP.NET Zero 多租户介绍

ASP.NET Zero 是一个基于 ASP.NET Core 的应用程序框架&#xff0c;它提供了多租户支持&#xff0c;以下是关于 ASP.NET Zero 多租户的介绍&#xff1a; 一、多租户概念 多租户是一种软件架构模式&#xff0c;允许多个客户&#xff08;租户&#xff09;共享同一套软件应用程序…

Unity 代码裁剪(Strip Engine Code)

文章目录 0.IL2CPP 打包运行闪退问题1.什么是代码裁剪2.为什么要使用代码裁剪3.代码裁剪设置与级别4.强制保留代码4.1 使用[Preserve]标签4.2 使用Link.xml文件 5.Strip中遇到的问题及解决方法6.注意事项 0.IL2CPP 打包运行闪退问题 Google Play要求从2019年8月1日起apk必须支…