機器人都會走迷宮了,我們如何在裁員浪潮中升職加薪!
大家好,我是哪吒。
臨下班的時候,同事電話里吐槽道
今年的年終獎比去年多了一點
嗯,是不錯,去年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