当前位置: 首页 > article >正文

【华为OD题库-058】矩阵中非1的元素个数-java

题目

存在一个m * n的二维数组,其成员取值范围为0,1,2。其中值为1的元素具备同化特性,每经过1S,将上下左右值为0的元素同化为1。而值为2的元素,免疫同化。将数组所有成员随机初始化为0或2,再将矩阵的[0,0]元素修改成1,在经过足够长的时间后求矩阵中有多少个元素是0或2(即0和2数量之和)
输入描述
输入的前两个数字是矩阵大小。后面是数字矩阵内容
输出描述
返回矩阵中非1的元素个数
示例1:
输入
4 4
0 0 0 0
0 2 2 2
0 2 0 0
0 2 0 0
输出
9
说明
输入数字前两个数字是矩阵大小。后面的数字是矩阵内容。起始位置(0,0)被修改为1后,最终只能同化矩阵为:
1 1 1 1
1 2 2 2
1 2 0 0
1 2 0 0
所以矩阵中非1的元素个数为:
9

思路

同:【华为OD题库-001】宜居星球改造计划-java

题解

package hwod;

import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class MatrixNotOne {
    private static int[] x_axis = {0, 1, 0, -1};
    private static int[] y_axis = {1, 0, -1, 0};

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int m = sc.nextInt();
        int n = sc.nextInt();
        sc.nextLine();
        int[][] nums = new int[m][n];
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                nums[i][j] = sc.nextInt();
            }
        }
        System.out.println(matrixNotOne(nums));
    }

    private static int matrixNotOne(int[][] nums) {
        int m = nums.length, n = nums[0].length;
        Queue<Integer> queue = new LinkedList<>();
        nums[0][0] = 1;
        queue.add(0);
        while (!queue.isEmpty()) {
            int cur = queue.remove();
            int x = cur / n, y = cur % n;
            for (int i = 0; i < 4; i++) {
                int new_x = x + x_axis[i];
                int new_y = y + y_axis[i];
                if (new_x >= 0 && new_x < m && new_y >= 0 && new_y < n && nums[new_x][new_y] == 0) {
                    nums[new_x][new_y] = 1;
                    queue.add(new_x * n + new_y);
                }
            }
        }
        int res = 0;
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if(nums[i][j]!=1) res++;
            }
        }
        return res;
    }
}

推荐

如果你对本系列的其他题目感兴趣,可以参考华为OD机试真题及题解(JAVA),查看当前专栏更新的所有题目。


http://www.kler.cn/a/156629.html

相关文章:

  • 《Python Web 抓取实战:豆瓣电影 Top 250 数据抓取与分析》
  • kubernetes简单入门实战
  • Python 中.title()函数和.lower()函数
  • ⾃动化运维利器Ansible-基础
  • 用MVVM设计模式提升WPF开发体验:分层架构与绑定实例解析
  • 【VIM】vim 常用命令
  • 知识点滴 - 什么是半透膜和渗透压
  • 计算机网络:传输层——多路复用与解复用
  • 十、FreeRTOS之FreeRTOS时间片调度
  • 实现简单的Spring
  • thinkphp6出现 htmlentities() expects parameter 1 to be string, array given
  • 金融帝国实验室(Capitalism Lab)官方正版游戏『2023双12特卖』
  • 微信小程序uni.chooseImage()无效解决方案
  • C#/.NET/.NET Core优秀项目和框架2023年11月简报
  • prometheus部署及与grafana结合应用
  • 使用射线单击物体显示,点击物体隐藏
  • LD_PRELOAD劫持、ngixn临时文件、无需临时文件rce
  • 人机交互——言语信息表示模型
  • NetApp EF 系列全闪存存储,为实时分析、HPC 和数据库等性能敏感型工作负载提供助力
  • 数字孪生3D场景开发工具:弥补不足,开拓全新可能
  • Linux入门攻坚——7、磁盘管理——文件系统挂载管理及RAID、LVM
  • 学生犯错误老师应该怎么教育
  • colab notebook导出为PDF
  • C语言图书管理系统的代码,包括图书录入、查询、插入、修改和删除功能。
  • 奇迹mu 架设过程中可能会出现的问题及解决办法
  • 微机原理——定时器8253(8254)学习1