被字节恶心到了

字节

日常逛 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,年度会员 有效期额外增加两个月,季度会员 有效期额外增加两周,更有超大额专属 🧧 和实物 🎁 福利每月发放。

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

欢迎关注,明天见。

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

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

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

相关文章

Stable Diffusion绘画 | 插件-Deforum:动态视频生成(上篇)

Deforum 与 AnimateDiff 不太一样&#xff0c; AnimateDiff 是生成丝滑变化视频的&#xff0c;而 Deforum 的丝滑程度远远没有 AnimateDiff 好。 它是根据对比前面一帧的画面&#xff0c;然后不断生成新的相似图片&#xff0c;来组合成一个完整的视频。 Deforum 的优点在于可…

CSS实现磨砂玻璃效果

引言 最近看到有一种磨砂玻璃背景效果很好看&#xff0c;自己简单制作了一个美杜莎女王小卡片&#xff0c;效果如下&#xff1a; backdrop-filter: blur(10px); 通过设置背景幕布的模糊程度&#xff0c;结合背景图片&#xff0c;实现磨砂玻璃效果 案例代码 <!DOCTYPE h…

Linux之实战命令25:xargs应用实例(五十九)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…

风格迁移项目一:如何使用

前言 由于我不太会pr&#xff0c;所以直接新建的项目&#xff0c; 原项目地址&#xff1a;https://github.com/Optimistism/Style-transfer 原项目代码的讲解地址&#xff1a;https://www.bilibili.com/video/BV1yY4y1c7Cz/ 本项目是对原项目的一点点完善。 项目地址&…

6.模拟电子技术——共集电极,共基极,多极放大电路

写在前面 这个是第六次的笔记&#xff0c;祝大家学习愉快 笔记部分 1.共集电极放大电路 首先&#xff0c;我们再复习一遍组态判断&#xff1a;基极进&#xff0c;发射极出&#xff0c;说明是共集电极放大电路。可能读者已经知道一些结论&#xff0c;先抛开这些&#xff0c;我…

Qt/C++开源控件 自定义雷达控件

使用Qt框架创建一个简单的雷达图&#xff0c;包含动态扫描、目标点生成、刻度和方向标识。代码实现使用C编写&#xff0c;适合用作学习和扩展的基础。 1. 头文件与基本设置 #include "RadarWidget.h" #include <QPainter> #include <QPen> #include &…

CMU 10423 Generative AI:lec15(Scaling Laws 大规模语言模型的扩展法则)

文章目录 一 概述1. **扩展规律的背景**2. **两种主要的扩展规律**3. **模型容量扩展规律**4. **信息论下界**5. **计算扩展规律**6. **训练高效性**7. **结论与启示** 二 2bit/parameter 概念&#xff08;模型的存储能力分析&#xff09;**1. 概念解释****2. 图表解读****3. 量…

匿名方法与Lambda表达式+泛型委托

匿名方法 和委托搭配使用&#xff0c;方便我们快速对委托进行传参&#xff0c;不需要我们定义一个新的函数&#xff0c;直接用delegate关键字代替方法名&#xff0c;后面跟上参数列表与方法体。 格式&#xff1a;delegate(参数列表){方法体} lambda表达式 是匿名方法的升级…

通信工程学习:什么是IP网际协议

IP&#xff1a;网际协议 IP网际协议&#xff08;Internet Protocol&#xff0c;简称IP&#xff09;是整个TCP/IP协议栈中的核心协议之一&#xff0c;它负责在网络中传送数据包&#xff0c;并提供寻址和路由功能。以下是对IP网际协议的详细解释&#xff1a; 一、对IP网际协议的…

Flask-3

文章目录 ORMFlask-SQLAlchemySQLAlchemy中的session对象数据库连接设置常用的SQLAlchemy字段类型常用的SQLAlchemy列约束选项 数据库基本操作模型类定义 数据表操作创建和删除表 数据操作基本查询SQLAlchemy常用的查询过滤器SQLAlchemy常用的查询结果方法多条件查询分页器聚合…

全局安装cnpm并设置其使用淘宝镜像的仓库地址(地址最新版)

npm、cnpm和pnpm基本概念 首先介绍一下npm和cnpm是什么&#xff0c;顺便说一下pnpm。 npm npm&#xff08;Node Package Manager&#xff09;是Node.js的默认包管理器&#xff0c;用于安装、管理和分享JavaScript代码包。它是全球最大的开源库生态系统之一&#xff0c;提供了数…

共享单车轨迹数据分析:以厦门市共享单车数据为例(八)

副标题&#xff1a;基于POI数据的站点综合评价——以厦门市为例&#xff08;三&#xff09; 什么是优劣解距离法&#xff08;TOPSIS&#xff09;&#xff1f; 优劣解距离法&#xff08;Technique for Order Preference by Similarity to Ideal Solution&#xff0c;简称TOPSI…

排序算法之——归并排序,计数排序

文章目录 前言一、归并排序1. 归并排序的思想2. 归并排序时间复杂度及空间复杂度3. 归并排序代码实现1&#xff09;递归版本2&#xff09;非递归版本 二、计数排序1. 计数排序的思想2. 计数排序的时间复杂度及空间复杂度3. 计数排序代码实现 总结&#xff08;排序算法稳定性&am…

ATLAS/ICESat-2 L3B 每 3 个月网格动态海洋地形图 V001

目录 简介 摘要 代码 引用 网址推荐 0代码在线构建地图应用 机器学习 ATLAS/ICESat-2 L3B Monthly 3-Month Gridded Dynamic Ocean Topography V001 ATLAS/ICESat-2 L3B 每月 3 个月网格动态海洋地形图 V001 简介 该数据集包含中纬度、北极和南极网格上动态海洋地形&…

基于大数据的Python+Django电影票房数据可视化分析系统设计与实现

目录 1 引言 2 系统需求分析 3 技术选型 4 系统架构设计 5 关键技术实现 6 系统实现 7 总结与展望 1 引言 随着数字媒体技术的发展&#xff0c;电影产业已经成为全球经济文化不可或缺的一部分。电影不仅是艺术表达的形式&#xff0c;更是大众娱乐的重要来源。在这个背景…

C++之多线程

前言 多线程和多进程是并发编程的两个核心概念,它们在现代计算中都非常重要,尤其是在需要处理大量数据、提高程序性能和响应能力的场景中。 多线程的重要性: 资源利用率:多线程可以在单个进程中同时执行多个任务,这可以更有效地利用CPU资源,特别是在多核处理器上。 性…

【Spring基础3】- Spring的入门程序

目录 3-1 Spring的下载3-2 Spring的 jar 包3-3 第一个 Spring程序第一步&#xff1a;添加spring context的依赖&#xff0c;pom.xml配置如下第二步&#xff1a;添加junit依赖第三步&#xff1a;定义bean&#xff1a;User第四步&#xff1a;编写spring的配置文件&#xff1a;bea…

macOS终端配置自动补全功能

如何在macOS终端中配置自动补全功能 终端是一个非常强大的工具&#xff0c;它可以用来完成很多任务&#xff0c;比如创建、复制、移动、删除文件&#xff0c;执行脚本和运行程序。不过它的默认设置对用户不太友好&#xff0c;作为开发者&#xff0c;我们通常习惯代码编辑器的辅…

docker pull 超时Timeout失败的解决办法

当国内开发者docker pull遇到如下提示时&#xff0c;不要惊讶 [rootvm /]# docker pull postgres Using default tag: latest Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp 128.121.146.235:443: i/o timeout [rootvm /]# 自2024…

创建Vue项目的时出现:无法加载文件 E:\software\node\node_global\vue.ps1,因为在此系统上禁止运行脚本

创建Vue项目的时出现的问题:出现&#xff1a;无法加载文件 E:\software\node\node_global\vue.ps1&#xff0c;因为在此系统上禁止运行脚本 解决方法&#xff1a; .PowerShelll的执行政策阻止了该操作,用 get-ExecutionPolicy 查看执行策略的状态为受限 输入Set-ExecutionPo…