网友爆料:某程序员被调岗为保安,薪资2360 元/月

科技   2025-01-02 11:24   陕西  

我看到今天这个话题,忍不住想笑又想叹气。

有个网友爆料,说一位网络工程师被公司调岗为保安,月薪还只有2360元。是的,你没听错,2360元/月!这是个什么操作?

我作为程序员,心里一下子就有很多疑问。

首先,网络工程师是做什么的?搭建网络、配置路由器、处理各种技术难题,简直是高级技术岗位。

结果,突然被调岗去看大门,真的是让人想不通。难道是公司认为,解决网络问题不如守门口更重要吗?🤔

再者,薪资2360元,真的是“惊掉下巴”。

要知道,一个普通城市的保安工资一般也就是这个数,甚至有时候还没这么高。调岗能直接降低到这个水平,可能连那些负责打扫卫生的大妈都得感叹一声:这也太离谱了吧?

作为程序员,我想说,突然被调岗到完全不相关的工作岗位,并且薪水大幅缩水,那对于任何一个技术岗位的人来说,都是一个很大的打击。

这个事情大家千万不要忍气吞声,一定要拿起法律的武器来保护自己,劳动局走一波,收获会更多!【备注:文未可领最新资料】

算法:体育馆的人流量

今天来聊个有趣的算法题:体育馆的人流量问题

这个题目看起来很简单,但要解决好却并不容易,因为涉及到的数据结构和算法技巧,可不是随便能搞定的。

假设我们有一个队列,队列里包含了一个时间段内每个人的进场和出场时间。进场时间和出场时间可能是重叠的,因此,我们需要一个高效的方法来计算出在某一时刻体育馆里有多少人。

问题描述

假设有一个事件流,记录了每个进入或离开体育馆的人。每个事件包含一个时间戳,以及一个标志,指示该事件是“进场”还是“出场”。

任务是:找到在每一时刻体育馆内的最大人数。

思路

这个问题可以用一个相对简单的算法来解决,关键在于如何高效地记录每个人的进出场时间,并能快速统计每一时刻的人员数量。我们可以使用“时间点排序”和“扫描线”技术。

  1. 事件排序:首先我们将所有进场和出场的事件按照时间升序排序。如果有多个事件发生在同一时刻,优先处理“进场”事件,因为这意味着会有更多人进入体育馆。

  2. 扫描线:接下来,扫描所有排序后的事件,记录当前体育馆内的人数,并且更新最大人数。

具体步骤是:

  • 对于每个“进场”事件,增加当前人数。
  • 对于每个“出场”事件,减少当前人数。
  • 在每一步,更新最大人数。

代码实现

下面是我写的一个简单的Java代码实现,来解决这个问题:

import java.util.*;

public class SportsHall {

    public static int maxPeople(int[][] events) {
        // 用一个列表存储所有的进场和出场时间点
        List<int[]> eventList = new ArrayList<>();
        
        for (int[] event : events) {
            eventList.add(new int[] {event[0], 1}); // 1表示进场
            eventList.add(new int[] {event[1], -1}); // -1表示出场
        }

        // 按照时间排序,如果时间相同,进场事件排在出场事件之前
        eventList.sort((a, b) -> a[0] == b[0] ? Integer.compare(b[1], a[1]) : Integer.compare(a[0], b[0]));

        int currentPeople = 0;
        int maxPeople = 0;

        // 扫描所有事件
        for (int[] event : eventList) {
            currentPeople += event[1];  // 增加或减少人数
            maxPeople = Math.max(maxPeople, currentPeople);  // 更新最大人数
        }

        return maxPeople;
    }

    public static void main(String[] args) {
        int[][] events = {
            {15}, // 第一个人在1秒进场,5秒离场
            {26}, // 第二个人2秒进场,6秒离场
            {37}, // 第三个人3秒进场,7秒离场
            {48}  // 第四个人4秒进场,8秒离场
        };

        System.out.println("最大人数:" + maxPeople(events));
    }
}

解释代码

  1. 事件列表构造:我们通过遍历每一个人进出场的时间段,构造一个事件列表。每个事件是一个数组,数组的第一个元素是时间戳,第二个元素标记进场(+1)或出场(-1)。

  2. 排序:然后我们对事件按时间排序,如果有相同的时间戳,进场的事件排在出场事件之前,保证在同一时刻体育馆的人数最大化。

  3. 扫描和统计最大人数:然后我们就可以简单地扫描这些事件,逐步更新当前的在场人数,并且更新最大人数。

复杂度分析

时间复杂度:我们首先要对事件进行排序,排序的时间复杂度是O(N log N),其中N是事件的总数(每个人的进出场时间各算一次)。然后我们进行一次线性扫描,时间复杂度是O(N)。所以,总的时间复杂度是O(N log N)。

空间复杂度:我们需要一个额外的空间来存储事件列表,空间复杂度是O(N)。

小结

这种算法使用了排序和扫描线的技巧,避免了暴力算法的O(N^2)复杂度。通过排序和有效的事件处理,我们能够快速得到最大人数。

对编程、职场感兴趣的同学,可以链接我,微信:coder301 拉你进入“程序员交流群”。
🔥东哥私藏精品 热门推荐🔥

东哥作为一名超级老码农,整理了全网最全《Java高级架构师资料合集》

资料包含了《IDEA视频教程》《最全Java面试题库》、最全项目实战源码及视频》及《毕业设计系统源码》总量高达 650GB 。全部免费领取!全面满足各个阶段程序员的学习需求。

Java面试那些事儿
回复 java ,领取Java面试题。分享AI编程,Java教程,Java面试辅导,Java编程视频,Java下载,Java技术栈,AI工具,Java开源项目,Java简历模板,Java招聘,Java实战,Java面试经验,IDEA教程。
 最新文章