题解 | #疯牛病I# Java

疯牛病I

https://www.nowcoder.com/practice/2066902a557647ce8e85c9d2d5874086

  1. 首先,初始化一些变量。m 和 n 分别表示牧场的行数和列数。count 表示健康牛的数量,初始值为 0。list 是一个链表,用来存储患有疯牛病的牛的位置。
  2. 然后,遍历牧场中的每个单元格。如果当前单元格的值为 2,则将其位置添加到 list 中;如果当前单元格的值为 1,则将 count 的值加 1。
  3. 接下来,定义一个二维数组 directions,表示患有疯牛病的牛周围 4 个方向上相邻单元格的坐标偏移量。
  4. 然后,使用 while 循环来模拟过去 k 分钟内患有疯牛病的牛感染周围健康牛的过程。在每次循环中,首先获取当前 list 的大小,并遍历其中每个元素。对于每个元素,分别计算其周围 4 个方向上相邻单元格的坐标,并判断该坐标是否在牧场范围内。如果在范围内且该单元格中有健康牛,则将该单元格中的牛感染,并将其位置添加到 list 中。
  5. 最后,返回剩余健康牛的数量。
public class Solution {

    public int healthyCows (int[][] pasture, int k) {
        int m = pasture.length;
        int n = pasture[0].length;

        int count = 0;
        LinkedList<int[]> list = new LinkedList<>();
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (pasture[i][j] == 2) list.add(new int[] {i, j});
                else if (pasture[i][j] == 1) count++;
            }
        }
        int[][] directions = new int[][] {{0, -1}, {0, 1}, {1, 0}, {-1, 0}};
        while (!list.isEmpty() && k > 0) {
            int size = list.size();
            for (int i = 0; i < size; i++) {
                int []temp = list.removeFirst();
                for (int j = 0; j < 4; ++j) {
                    int newx = temp[0] + directions[j][0];
                    int newy = temp[1] + directions[j][1];
                    if (newx >= 0 && newx < m && newy >= 0 && newy < n) {
                        if (pasture[newx][newy] == 1) {
                            pasture[newx][newy] = 2;
                            count--;
                            list.add(new int[] {newx, newy});
                        }
                    }
                }
            }
            k--;
        }
        return count;
    }
}

算法题刷刷刷 文章被收录于专栏

数组、链表、栈、队列、堆、树、图等。 查找和排序:二分查找、线性查找、快速排序、归并排序、堆排序等。 动态规划:背包问题、最长公共子序列、最短路径 贪心算法:活动选择、霍夫曼编码 图:深度优先搜索、广度优先搜索、拓扑排序、最短路径算法(如 Dijkstra、Floyd-Warshall) 字符串操作:KMP 算法、正则表达式匹配 回溯算法:八皇后问题、0-1 背包问题 分治算法:归并排序、快速排序

全部评论

相关推荐

03-29 12:10
门头沟学院 C++
挣K存W养DOG:散漫消极者淘汰,一眼坑爹。实习几个月转正的时候说你加班太少,能力还行态度不够积极裁了,马上老实。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务