题解 | #疯牛病II#
题目考察的知识点
-
二维数组的遍历与操作:题目中给出一个 m x n 的牧场,需要遍历整个二维数组,并进行相应的操作。
-
广度优先搜索(BFS):题目描述了疯牛病在牧场中的传播过程。BFS是一种图遍历算法,可以用来模拟疯牛病的传播过程。
-
健康牛感染的条件判断:题目规定了健康牛感染的条件,即患病牛周围的四个方向上的健康牛会被感染,需要根据这个条件进行判断。
题目解答方法的文字分析
在题目解答方法的文字分析中,我们通过遍历整个牧场,将患有疯牛病的牛的位置保存到队列中,并记录当前牧场中健康牛的数量。然后,使用BFS来模拟疯牛病的传播过程,每次从队列中取出一个感染牛,并将其周围的健康牛感染,并将感染后的牛加入队列。同时,计数器加1,表示经过了1分钟。继续循环直到队列为空,表示所有的感染已经完成。最后,判断是否还有健康的牛留在牧场中,如果有,则返回-1,表示不可能到达没有健康牛的情况;否则,返回计数器的值减去1,表示到达没有健康牛的最小分钟数。
本题解析所用的编程语言
本题解析所用的编程语言是JavaScript。JavaScript是一门脚本语言,广泛应用于Web开发。
完整且正确的编程代码
function healthyCowsII(pasture) {
const m = pasture.length;
const n = pasture[0].length;
const queue = [];
let healthyCount = 0; // 健康牛的数量
// 遍历牧场,将患有疯牛病的牛加入队列,并记录健康牛的数量
for (let i = 0; i < m; i++) {
for (let j = 0; j < n; j++) {
if (pasture[i][j] === 2) {
queue.push([i, j]);
} else if (pasture[i][j] === 1) {
healthyCount++;
}
}
}
// 牛的四个方向的偏移量
const directions = [[-1, 0], [1, 0], [0, -1], [0, 1]];
let minutes = 0; // 记录经过的分钟数
// 模拟疯牛病的传播过程
while (queue.length > 0) {
const size = queue.length;
for (let i = 0; i < size; i++) {
const [x, y] = queue.shift();
for (const [dx, dy] of directions) {
const newX = x + dx;
const newY = y + dy;
// 判断新位置是否在牧场范围内且为健康的牛
if (newX >= 0 && newX < m && newY >= 0 && newY < n && pasture[newX][newY] === 1) {
// 将健康牛感染,并将感染后的牛加入队列
pasture[newX][newY] = 2;
queue.push([newX, newY]);
healthyCount--; // 健康牛数量减少
}
}
}
if (queue.length > 0) {
minutes++; // 每次处理完当前队列中的牛,分钟数加1
}
}
if (healthyCount > 0) {
return -1; // 还有健康的牛留在牧场中,不可能到达没有健康牛的情况
} else {
return minutes; // 返回经过的分钟数
}
}
题解 | 前端刷题 文章被收录于专栏
题目考察的知识点 题目解答方法的文字分析 本题解析所用的编程语言 完整且正确的编程代码
