【华为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

题解

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),查看当前专栏更新的所有题目。

相关推荐
lbb 小魔仙2 小时前
面向 NPU 的高性能矩阵乘法:CANN ops-nn 算子库架构与优化技术
线性代数·矩阵·架构
空白诗2 小时前
CANN ops-nn 算子解读:大语言模型推理中的 MatMul 矩阵乘实现
人工智能·语言模型·矩阵
池央6 小时前
ops-nn 算子库中的数据布局与混合精度策略:卷积、矩阵乘法与 RNN 的优化实践
rnn·线性代数·矩阵
深鱼~8 小时前
大模型底层算力支撑:ops-math在矩阵乘法上的优化
人工智能·线性代数·矩阵·cann
Zfox_8 小时前
CANN PyPTO 编程范式深度解析:并行张量与 Tile 分块操作的架构原理、内存控制与流水线调度机制
线性代数·矩阵·架构
TechWJ8 小时前
catlass深度解析:Ascend平台的高性能矩阵运算模板库
线性代数·矩阵·ascend·cann·catlass
deep_drink1 天前
【基础知识一】线性代数的核心:从矩阵变换到 SVD 终极奥义
线性代数·机器学习·矩阵
数智工坊1 天前
【数据结构-特殊矩阵】3.5 特殊矩阵-压缩存储
数据结构·线性代数·矩阵
AI科技星1 天前
张祥前统一场论核心场方程的经典验证-基于电子与质子的求导溯源及力的精确计算
线性代数·算法·机器学习·矩阵·概率论
deep_drink1 天前
【基础知识二】彻底读懂拉普拉斯矩阵 (Laplacian)
人工智能·深度学习·线性代数·矩阵