【华为OD题库-002】需要打开多少监视器-Java

news/2024/7/20 19:14:08 标签: 华为od, java, 开发语言

题目

某长方形停车场,每个车位上方都有对应监控器,当且仅当在当前车位或者前后左右四个方向任意一个车位范围停车时,监控器才需要打开:
给出某一时刻停车场的停车分布,请统计最少需要打开多少个监控器
输入描述
第一行输入m,n表示长宽,满足1<m,n <= 20;
后面输入m行,每行有n个0或1的整数,整数间使用一个空格隔开,表示该行已停车情况,其中0表示空位,1表示已停:
输出描述
最少需要打开监控器的数量
示例1:
输入
3 3
0 0 0
0 1 0
0 0 0
输出
5
说明
中间1的位置上需要打开监视器,且其上下左右皆需要打开监视器,共5个。

思路

根据题意,就是找到是1或者临近单元格是1的单元格数量,直接遍历判断即可。
也可以理解为1的单元格,向周围扩散一次后,得到的1的单元格数量(类似宜居星球改造计划)

题解

java">package hwod;

import java.util.*;

//需要打开多少监视器
public class CalMonitorNum {

    public static int[][] grids;
    public static int m;
    public static int n;
    public static int[] x_dirs = new int[]{1, 0, -1, 0};
    public static int[] y_dirs = new int[]{0, 1, 0, -1};

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        m = sc.nextInt();
        n = sc.nextInt();
        grids = new int[m][n];
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                grids[i][j] = sc.nextInt();
            }
        }
        int res = 0;
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (grids[i][j] == 1 || neighbor(i, j)) res++;
            }
        }
        System.out.println(res);
    }

    private static boolean neighbor(int i, int j) {
        for (int k = 0; k < 4; k++) {
            int x = i + x_dirs[k], y = j + y_dirs[k];
            if (x >= 0 && x < m && y >= 0 && y < n && grids[x][y] == 1) return true;
        }
        return false;
    }

}


http://www.niftyadmin.cn/n/5150479.html

相关文章

Postman接口测试工具,提高SpringBoot开发效率

文章目录 &#x1f33a;工具—postman⭐作用&#x1f3f3;️‍&#x1f308;安装&#x1f388;创建工作空间 &#x1f384;简单参数⭐原始方式&#x1f388;我们建立springboot项目&#xff0c;输入下面的代码&#x1f388;运行 ⭐SpringBoot方式 &#x1f384;实体参数&#x…

R语言657中单色colors颜色索引表---全平台可用

R语言657中单色colors颜色索引表—全平台可用

在全球半导体行业中“疯狂冒险”的台积电

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 总结&#xff1a; &#xff08;1&#xff09;尽管在收入和利润率方面面临挑战&#xff0c;但台积电(TSM)仍在为自己在半导体行业的复苏做准备。 &#xff08;2&#xff09;台积电的全球扩张和先进技术战略使其能够充分利用…

Java 基础知识:面试官必问的问题

本文重点关注Java编程语言的基础知识&#xff0c;并针对求职面试中常见的问题进行了总结。希望帮助读者准备面试&#xff0c;了解常见的Java基础问题 数据类型 基本类型 byte/8char/16short/16int/32float/32long/64double/64boolean/~ boolean 只有两个值&#xff1a;true、…

MedianFlow 跟踪算法详解

在技术日新月异的时代&#xff0c;今天的技术可能在明天就会被新的技术取代&#xff0c;例如现在爆火的大模型。但目前看来&#xff0c;大模型还不能做到无所不能。 所以这篇博客还是来考古一下&#xff0c;写一下传统的跟踪算法。这里不是为了怼大模型而为了写一篇传统算法而…

女孩子穿这种粉粉嫩嫩~的卫衣也太好看了吧

果然女孩子穿这种粉粉嫩嫩的衣服 真的超级有甜美可爱氛围哎 软糯亲肤的面料&#xff0c;上身很舒服哦 时尚polo领加上半拉链设计 既实用又美观&#xff0c;穿脱很方便

Mac苹果电脑分辨率修改管理 安装SwitchResX 完美解决

SwitchResX for Mac是一款Mac应用程序&#xff0c;可帮助您更好地管理和控制显示器分辨率和其他显示设置。使用SwitchResX&#xff0c;您可以创建自定义分辨率、旋转屏幕、调整显示器色彩配置等。 1. 自定义分辨率&#xff1a;SwitchResX允许用户创建自定义的屏幕分辨率&#…

【解决】*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS

一&#xff1a;运行keil时发现这个问题&#xff1f; *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS 二、发现有个函数没有调用&#xff0c;注释掉就可以了