今天这个话题真的让我忍不住掏出键盘来聊两句——迪子员工爆料,说他们的老员工学历和能力都堪忧,三本野鸡大学毕业,居然还管着一堆985、211硕士,甚至华为、腾讯出来的下属。这画面感真是让我忍不住扶额,忍不住又想笑😂。
很多人吐槽的“学历鄙视链”,说白了,就是在起跑线上的差距。但进了公司,大家跑得快不快,可不是光看起跑线,还是得看脚力和脑子。
但问题是,有些领导未必是靠技术上位,而是公司资源、人脉、经验这种软实力占优。别问,问就是职场生态位的问题。
算法题:离建筑物最近的距离
题目:
代码时间:来点实战
从每个建筑物出发,用BFS计算到所有空地的距离。 累加所有建筑物对空地的距离,找到最小值。
import java.util.*;
public class Solution {
public int shortestDistance(int[][] grid) {
int rows = grid.length;
int cols = grid[0].length;
int[][] totalDistance = new int[rows][cols];
int[][] reachCount = new int[rows][cols];
int buildingCount = 0;
// 定义四个方向
int[] directions = {-1, 0, 1, 0, -1};
// 先统计建筑物的个数
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (grid[i][j] == 1) {
buildingCount++;
bfs(grid, i, j, totalDistance, reachCount, directions);
}
}
}
// 找最小距离
int minDistance = Integer.MAX_VALUE;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (grid[i][j] == 0 && reachCount[i][j] == buildingCount) {
minDistance = Math.min(minDistance, totalDistance[i][j]);
}
}
}
return minDistance == Integer.MAX_VALUE ? -1 : minDistance;
}
private void bfs(int[][] grid, int startX, int startY, int[][] totalDistance, int[][] reachCount, int[] directions) {
int rows = grid.length;
int cols = grid[0].length;
boolean[][] visited = new boolean[rows][cols];
Queue<int[]> queue = new LinkedList<>();
queue.offer(new int[]{startX, startY});
visited[startX][startY] = true;
int distance = 0;
while (!queue.isEmpty()) {
int size = queue.size();
distance++;
for (int i = 0; i < size; i++) {
int[] current = queue.poll();
for (int d = 0; d < 4; d++) {
int newX = current[0] + directions[d];
int newY = current[1] + directions[d + 1];
if (newX >= 0 && newX < rows && newY >= 0 && newY < cols
&& grid[newX][newY] == 0 && !visited[newX][newY]) {
visited[newX][newY] = true;
queue.offer(new int[]{newX, newY});
totalDistance[newX][newY] += distance;
reachCount[newX][newY]++;
}
}
}
}
}
public static void main(String[] args) {
Solution sol = new Solution();
int[][] grid = {
{1, 0, 2, 0, 1},
{0, 0, 2, 0, 0},
{0, 0, 0, 0, 0},
};
System.out.println(sol.shortestDistance(grid)); // Output: 7
}
}
BFS的作用:每次从建筑物出发,找到所有能到的空地,累加距离。 统计机制: reachCount
记录某个空地能被多少建筑物到达。如果一个空地不能被所有建筑物到达,那它不符合条件。复杂度优化:相比暴力法,这种思路省了很多重复计算。
-END-
以上,就是今天的分享了,看完文章记得右下角给何老师点赞,也欢迎在评论区写下你的留言。