当前位置:AIGC资讯 > AIGC > 正文

机器人都会走迷宫了,我们如何在裁员浪潮中升职加薪!

大家好,我是哪吒。

临下班的时候,同事电话里吐槽道

今年的年终奖比去年多了一点

嗯,是不错,去年1000,今年2000

今年已经是连续第四年没开年会了,疫情三年,今年默认疫情了!

那要不要换个工作啥的?

她笑了笑,回了句,抱歉,今年没有金三银四了!

现在的行情就是哀鸿遍野。

裁员不可怕,可怕的是不给任何赔偿,还要让你憋屈的主动离职,比如强制加班、强制调岗、强制出差。

能领取大礼包毕业的,已经算是人上人了。

有些裁员也是以讹传讹,无中生有。

不管怎么裁,我们还是要工作的,千万不要冲动,转行去干四大金刚(快递、外卖、滴滴、自媒体)。你的身体扛不住的,而且它们也没有你想象中的那么香。

面对裁员问题,我们要如何自救?

如果是被裁者:

  • 与领导和HR心平气和的谈谈,如何才能获取到更好的失业补偿,切记冲动,破罐子破摔,愤然裸辞!
  • 充分利用交接时间,与家人、朋友结伴出游,调整自己的心态,克服被抛弃的消极情绪。
  • 充分利用企业规模裁员的机会,跳槽到你心仪的公司,也许这是一次升职加薪的好机遇。

如果是幸存者:

裁员一波接一波,一个季度一份名单,此次没你,下次就不一定了!

  • 做好本职工作,争取多在领导面前表现,听哥一句话,会干的不如会说的。
  • 裁员过后,工作任务势必会增加,调整心态,避免消极情绪。
  • 多学习,技多不压身,不管大环境多糟糕,有能力的人总会有用武之地。
  • 做好职业规划,不管裁与不裁,切忌躺平,学如逆水行舟,不进则退,现在的小年轻儿,猛的很,什么云原生、中间件、JVM、性能优化,信手拈来。
  • 要想进大厂,算法很重要。

我们只有不断地学习新知识和技能,以保持高水平的编程能力。这不仅能够提升我们的工作效率,还能够在职场竞争中脱颖而出,让我们一起在裁员的浪潮中升职加薪。

机器人走迷宫

一、题目描述

  • 房间由XY的方格组成,例如下图为24的大小。每一个方格以坐标(x,y)描述。
  • 机器人固定从方格(0,0)出发,只能向东或者向北前进。出口固定为房间的最东北角,如下图的方格(5,3)。用例保证机器人可以从入口走到出口。
  • 房间有些方格是墙壁,如(4,1),机器人不能经过那儿。
  • 有些地方是一旦到达就无法走到出口的,如标记为B的方格,称之为陷阱方格。
  • 有些地方是机器人无法到达的的,如标记为A的方格,称之为不可达方格,不可达方格不包括墙壁所在的位置。
  • 如下示例图中,陷阱方格有2个,不可达方格有3个;
  • 请为该机器人实现路径规划功能: 给定房间大小、墙壁位置,请计算出陷阱方格与不可达方格分别有多少个。

二、输入描述

  • 第一行为房间的X和Y (0 < X,Y = 1000)
  • 第二行为房间中墙壁的个数N (0 = N< X*Y)

同一行中如果有多个数据以一个空格隔开,用例保证所有的输入数据均合法。(结尾不带回车换行)。

三、输出描述

陷阱方格与不可达方格数量,两个信息在一行中输出,以一个空格隔开。(结尾不带回车换行)。

四、解题思路

1.第一行输入行数m、列数n。

2.第二行输入墙数wallNum。

3.下面的wallNum行,输入墙的坐标。

4.定义二维矩阵matrix,并进行初始化,默认0,墙为-1。

  • 0:不可达,因为默认是0,向x和y正方向一步一步走的话,如果未涉及,就是不可达,所以是0。
  • -1:墙。
  • 1:可达。
  • -2:陷阱。

5.通过深度优先搜索dfs,遍历matrix。

  • 如果x或y正向都可达,则将其设为可达1。
  • 如果x或y正向都不可达,则将其设为陷阱-2。

6.遍历matrix。

  • 如果此时为0,表示不可达。
  • 如果此时为-2,表示陷阱。

7.按照指定格式输出陷阱和不可达的数量。

五、深度优先搜索dfs

在我们遇到的一些问题当中,有些问题我们不能够确切的找出数学模型,即找不出一种直接求解的方法,解决这一类问题,我们一般采用搜索的方法解决。搜索就是用问题的所有可能去试探,按照一定的顺序、规则,不断去试探,直到找到问题的解,试完了也没有找到解,那就是无解,试探时一定要试探完所有的情况(实际上就是穷举);

对于问题的第一个状态,叫初始状态,要求的状态叫目标状态。搜索就是把规则应用于实始状态,在其产生的状态中,直到得到一个目标状态为止。产生新的状态的过程叫扩展(由一个状态,应用规则,产生新状态的过程)。

搜索的要点:

  • 初始状态。
  • 重复产生新状态。
  • 检查新状态是否为目标,是结束,否转(2)。

如果搜索是以接近起始状态的程序依次扩展状态的,叫宽度优先搜索。

如果扩展是首先扩展新产生的状态,则叫深度优先搜索。

深度优先搜索用一个数组存放产生的所有状态。

  • 把初始状态放入数组中,设为当前状态。
  • 扩展当前的状态,产生一个新的状态放入数组中,同时把新产生的状态设为当前状态。
  • 判断当前状态是否和前面的重复,如果重复则回到上一个状态,产生它的另一状态。
  • 判断当前状态是否为目标状态,如果是目标,则找到一个解答,结束算法。
  • 如果数组为空,说明无解。

六、Java算法源码

private static int m;// 行数
private static int n;// 列数
private static int wallNum;// 墙数
private static int[][] matrix;// 二维矩阵

/**
 * 0:不可达,因为默认是0,向x和y正方向一步一步走的话,如果未涉及,就是不可达,所以是0
 * -1:墙
 * 1:可达
 * -2:陷阱
 */
public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int[] input = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
    m = input[0];
    n = input[1];
    wallNum = Integer.valueOf(sc.nextLine());

    matrix = new int[m][n];
    matrix[m - 1][n - 1] = 1; // 可达1
    for (int i = 0; i < wallNum; i++) {
        int[] arr = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
        matrix[arr[0]][arr[1]] = -1; // 墙-1,默认为0
    }

    dfs(0, 0);

    int trapNum = 0; // 陷阱
    int inaccessibleNum = 0; // 不可达

    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            if (matrix[i][j] == 0) {// 不可达
                inaccessibleNum++;
            }else if (matrix[i][j] == -2) {// 陷阱
                trapNum++;
            }
        }
    }

    System.out.println(trapNum + " " + inaccessibleNum);
}

public static boolean dfs(int x, int y) {
    if (x >= m || y >= n) {// 非法输入
        return false;
    }
    if (matrix[x][y] == -1) {// 墙
        return false;
    }
    if (matrix[x][y] == -2) {// 不可达
        return false;
    }
    if (matrix[x][y] == 1) {// 可达
        return true;
    }

    if (matrix[x][y] == 0) {
        boolean step_x = dfs(x + 1, y);
        boolean step_y = dfs(x, y + 1);

        // 如果x或y正向都可达,则将其设为可达1
        if (step_x || step_y) {
            matrix[x][y] = 1;
        } else {// 如果x或y正向都不可达,则将其设为陷阱-2
            matrix[x][y] = -2;
        }
    }
    return matrix[x][y] == 1;
}

七、效果展示

1.输入

6 4 5 0 2 1 2 2 2 4 1 5 1

2.输出

2 3

3.说明


更新时间 2024-02-22