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

华为OD机试真题【开心消消乐】

1、题目描述

【开心消消乐】
给定一个N行M列的二维矩阵,矩阵中每个位置的数字取值为0或1。矩阵示例如:
1100
0001
0011
1111
现需要将矩阵中所有的1进行反转为0,规则如下:
1) 当点击一个1时,该1便被反转为0,同时相邻的上、下、左、右,以及左上、左下、右上、右下8 个方向的1(如果存在1)均会自动反转为0;
2)进一步地,一个位置上的1被反转为0时,与其相邻的8个方向的1(如果存在1)均会自动反转为0;

按照上述规则示例中的矩阵只最少需要点击2次后,所有值均为0。请问,给定一个矩阵,最少需要点击几次后,所有数字均为0?

【输入描述】
第一行输入两个整数,分别表示矩阵的行数 N 和列数 M,取值范围均为 [1,100]。接下来 N 行表示矩阵的初始值,每行均为 M 个数,取值范围 [0,1]。

【输出描述】
输出一个整数,表示最少需要点击的次数。
【实例一】
输入:

3 3
1 0 1
0 1 0
1 0 1
输出: 1,说明:上述样例中,四个角上的1均在中间的1的相邻8个方向上,因此只需要点击一次即可。

2、解题思路

此题与【岛屿数量】题类似,可用dfs回溯遍历的方法感染矩阵的位置即将符合题意的方向的1都变成0,统计需要多少次才能将矩阵中所有的值都变成0

3、参考代码

import java.util.Scanner;/*** @Author * @Date 2023/4/25 23:57*/
public class 开心消消乐 {public static void main(String[] args) {Scanner in = new Scanner(System.in);while (in.hasNext()) {int n = in.nextInt();int m = in.nextInt();int[][] arr = new int[n][m];for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {arr[i][j] = in.nextInt();}}int res = 0;for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {if (arr[i][j] == 1) {infect(arr, i, j);res++;}}}System.out.println(res);}}public static void infect(int[][] arr, int x, int y) {if(x < 0 || y < 0 || x >= arr.length || y >= arr[0].length || arr[x][y] != 1) {return;}arr[x][y] = 0;  // 感染的过程infect(arr, x + 1, y);  // 向下infect(arr, x - 1, y);  // 向上infect(arr, x, y + 1);  // 向右infect(arr, x, y - 1);  // 向左infect(arr, x + 1, y - 1);  // 向左下infect(arr, x + 1, y + 1);  // 向右上infect(arr, x + 1, y + 1);  // 向右下infect(arr, x - 1, y + 1);  // 向左上}
}

4、相似题目

(1)岛屿数量
区别在于这题指能向四个方向感染,而【开心消消乐】能向八个方向感染

public int numIslands(char[][] grid) {int count = 0;for(int i = 0; i < grid.length; i++) {for(int j = 0; j < grid[0].length; j++) {if(grid[i][j] == '1'){infect(grid, i, j);count++;}}}return count;}private void infect(char[][] grid, int i, int j){if(i < 0 || j < 0 || i >= grid.length || j >= grid[0].length || grid[i][j] == '0') return;grid[i][j] = '0';infect(grid, i + 1, j);  // 向下infect(grid, i, j + 1);  // 向右infect(grid, i - 1, j);  // 向上infect(grid, i, j - 1);  // 向左}

相关文章:

华为OD机试真题【开心消消乐】

1、题目描述 【开心消消乐】 给定一个N行M列的二维矩阵&#xff0c;矩阵中每个位置的数字取值为0或1。矩阵示例如&#xff1a; 1100 0001 0011 1111 现需要将矩阵中所有的1进行反转为0&#xff0c;规则如下&#xff1a; 1&#xff09; 当点击一个1时&#xff0c;该1便被反转为…...

txt去重

目录 txt去重 让我解释一下代码的逻辑&#xff1a; for a in [a.strip(\n) for a in list(f_read)]: txt去重 f_read open(r./1.txt, r, encodingutf-8) f_write open(r./2.txt, w,encodingutf-8) data set() for a in [a.strip(\n) for a in list(f_read)]:if a not in …...

系统集成测试与验收

功能性测试&#xff1a;测试系统应提供的每一个功能和安全性限制&#xff0c;检查系统是否已 正常实现所有功能。 连通性测试&#xff1a;测试网络上任意站点间是否能够相互传输数据&#xff0c;测试各个终端 能否登录中心服务器&#xff0c;并访问数据库&#xff0c;对数据库…...

ElementPlus文件上传 ,在上传前钩子中判断文件是否为图片

在ElementPlus中&#xff0c;可以使用beforeUpload属性来指定上传文件之前的钩子函数&#xff0c;在该函数中可以对文件进行判断并进行相关操作。 首先&#xff0c;在data中定义一个isImage变量来记录文件是否为图片&#xff0c;初始值为false。然后&#xff0c;在钩子函数中判…...

涂鸦智能获Matter Non-VID Scoped PAA资质 助力开发者拥抱Matter生态

今年5月&#xff0c;全球化IoT开发者平台涂鸦智能&#xff08;NYSE: TUYA&#xff0c;HKEX: 2391&#xff09;正式生成Tuya Matter PAA密钥根&#xff0c;并于7月&#xff0c;成功通过了连接标准联盟和第三方MA机构审查而上线。自此&#xff0c;涂鸦正式成为全球同时提供支持Ma…...

nsqd的架构及源码分析

文章目录 一 nsq的整体代码结构 二 回顾nsq的整体架构图 三 nsqd进程的作用 四 nsqd启动流程的源码分析 五 本篇博客总结 在博客 nsq整体架构及各个部件作用详解_YZF_Kevin的博客-CSDN博客 中我们讲了nsq的整体框架&#xff0c;各个部件的大致作用。如果没看过的&…...

​LeetCode解法汇总344. 反转字符串

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;力扣 描述&#xff1a; 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数…...

【C语言基础】数组的高级应用(上)

文章目录 一、数组的概念1.1 基本理解1.2 从内存角度理解数组1.3 从编译器角度理解数组 二、数组的定义2.1 第一种&#xff1a;完全初始化2.2 第二种&#xff1a;不完全初始化 三、访问数组的两种方式3.1 第一种&#xff1a;数组的方式依次访问3.2 第二种&#xff1a;指针的方式…...

面试题:bind、call、apply 区别?如何实现一个 bind?

面试题&#xff1a;bind、call、apply 区别&#xff1f;如何实现一个 bind? 一、call()代码描述&#xff1a; 二、apply()代码描述&#xff1a; 三、bind()—最重要代码描述&#xff1a; 四、call、apply、bind 总结 一、call() 代码描述&#xff1a; 二、apply() 代码描述&am…...

【SpringBoot学习笔记】01.第一个程序HelloWorld

项目创建方式&#xff1a;使用 IDEA 直接创建项目 1、创建一个新项目 2、选择spring initalizr &#xff0c; 可以看到默认就是去官网的快速构建工具那里实现 3、填写项目信息 4、选择初始化的组件&#xff08;初学勾选 Web 即可&#xff09; 5、填写项目路径 6、等待项目…...

【学会动态规划】买卖股票的最佳时机含手续费(16)

目录 动态规划怎么学&#xff1f; 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后&#xff1a; 动态规划怎么学&#xff1f; 学习一个算法没有捷径&#xff0c;更何况是学习动态规划&#xff0c; 跟我…...

网络原因导致git下载报错处理办法

如下&#xff0c;git clone时报错&#xff1a; RPC failed; curl 18 transfer closed with outstanding read data remaining 5670 bytes of body are still expected fetch-pack: unexpected disconnect while reading sideband packet early EOF fetch-pack: invalid index…...

APP后端选择什么服务器

对于很多刚入行的朋友来说&#xff0c;不清楚应该选择什么样的服务器提供商&#xff0c;是选择传统的IDC, 租用服务器租用机柜&#xff0c;还是选择现在很火的云服务器呢&#xff1f;在本文中&#xff0c;通过对比传统的IDC和云服务&#xff0c;简单阐述一下服务器的选择。  …...

什么是反射机制,反射机制的应用场景

文章目录 反射机制介绍获取 Class 对象的四种方式代码实例静态编译和动态编译反射机制优缺点反射的应用场景 反射机制介绍 JAVA 反射机制是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类的所有属性和方法&#xff1b;对于任意一个对象&#xff0c;都能…...

Visual Studio 2019 实用功能设置(背景颜色,代码字体及行号设置)

前言 Visual Studio 2019 安装包的下载教程、安装教程 教程 博主博客链接&#xff1a;https://blog.csdn.net/m0_74014525 关注博主&#xff0c;后期持续更新系列文章 系列文章 第一篇&#xff1a;Visual Studio 2019 详细安装教程&#xff08;图文版&#xff09; 第二篇&…...

简述Mysql索引

一、索引概述 1.1 索引概述 MySQL官方对索引的定义为&#xff1a;索引&#xff08;Index&#xff09;是帮助MySQL高效获取数据的数据结构。 索引的本质&#xff1a;索引是数据结构。你可以简单理解为“排好序的快速查找数据结构”&#xff0c;满足特定查找算法。 这些数据结…...

windows .gitignore 加入文件名后 依然可以从git status中看到文件问题

最近在学git&#xff0c;对着b站的视频操作&#xff0c;结果很简单的添加.gitignore文件操作&#xff0c;up主的正常隐藏&#xff0c;我的却一直出问题。 百思不得其解&#xff0c;网上各种啥啥啥清缓存都没讲到点上。 最后发现是.gitignore文件有问题&#xff0c;windows默认…...

召唤神龙打造自己的ChatGPT

在之前的两篇文章中&#xff0c;我介绍了GPT 1和2的模型&#xff0c;并分别用Tensorflow和Pytorch来实现了模型的训练。具体可以见以下文章链接&#xff1a; 1. 基于Tensorflow来重现GPT v1模型_gzroy的博客-CSDN博客 2. 花费7元训练自己的GPT 2模型_gzroy的博客-CSDN博客 有…...

裝修公司同室內設計公司有咩分別?

很多裝修業主都會有裝修公司師傅會不會「出圖」的這個疑問。 出圖是指室內設計的各種圖&#xff0c;是設計師跟戶主和裝修師傅溝通裝修的工具&#xff0c;亦都係施工、驗收的證明。通常齊全的圖通常只有設計公司才可以完整提供例如平面圖、3D效果圖等等。 由於室內設計公司會…...

android oaid

Oaid获取接入流程 移动智能设备标识公共服务平台 AndroidID、IMEI、OAID获取 oaid_sdk_1.1.0的aar 随着Google对隐私的重视以及Android10的逐渐普及&#xff0c;获取设备的唯一标识越来越来难&#xff0c;在Android10以前&#xff0c;Android设备唯一标识包含IMEI、AndroidID、…...

嵌入式开发中全局变量的优化实践与替代方案

1. 嵌入式开发中的全局变量困境作为一名在嵌入式领域摸爬滚打多年的工程师&#xff0c;我见过太多因为滥用全局变量而陷入维护噩梦的项目。记得刚入行时接手过一个智能家居控制器的代码库&#xff0c;打开项目一看&#xff0c;光是extern声明的全局变量就有200多个&#xff0c;…...

别再被rosdep卡住了!ALOHA机械臂部署中‘skip noetic’报错的保姆级解决方案

突破ALOHA机械臂部署瓶颈&#xff1a;ROS Noetic生命周期终止后的实战解决方案 当你在深夜的实验室里调试ALOHA机械臂&#xff0c;屏幕突然跳出"Skip end-of-life distro noetic"的红色警告&#xff0c;那种感觉就像在高速公路上突然遇到路障。这不是普通的报错&…...

ROS Noetic下,用DWA和TEB调教你的机器人:move_base局部规划器参数实战避坑指南

ROS Noetic下DWA与TEB局部规划器参数调优实战指南 1. 理解局部规划器的核心作用 在ROS导航堆栈中&#xff0c;局部规划器扮演着机器人运动控制的"末梢神经"角色。当全局规划器生成了一条从起点到终点的理想路径后&#xff0c;局部规划器负责根据实时环境信息&#xf…...

Blender USDZ插件架构重构:实现99.9%AR模型兼容性与300%导出性能提升

Blender USDZ插件架构重构&#xff1a;实现99.9%AR模型兼容性与300%导出性能提升 【免费下载链接】BlenderUSDZ Simple USDZ file exporter plugin for Blender3D 项目地址: https://gitcode.com/gh_mirrors/bl/BlenderUSDZ 在AR内容创作领域&#xff0c;技术团队常面临…...

UniApp安卓端MQTT连接踩坑记:mqtt.js 3.0版本与原生插件到底怎么选?

UniApp安卓端MQTT方案深度对比&#xff1a;从协议适配到性能优化的实战指南 去年接手一个智能家居控制项目时&#xff0c;我曾在mqtt.js和原生插件之间反复横跳。那个凌晨三点还在调试WSS协议的夜晚让我明白——技术选型从来不是非黑即白的选择题。本文将用真实项目经验&#…...

避开这些坑,你的芯片设计才能成功流片:CMOS制造工艺中的关键检查点详解

避开这些坑&#xff0c;你的芯片设计才能成功流片&#xff1a;CMOS制造工艺中的关键检查点详解 在芯片设计领域&#xff0c;流片失败往往意味着数百万美元的损失和数月的开发时间付诸东流。对于初入行的工程师而言&#xff0c;理解制造工艺中的潜在风险点比掌握正向设计流程更为…...

Kubernetes实战:构建高可用Zookeeper集群(3节点)的完整指南

1. 为什么要在Kubernetes上部署Zookeeper集群&#xff1f; Zookeeper作为分布式系统的"大脑"&#xff0c;在微服务架构中扮演着关键角色。它负责维护配置信息、命名服务、分布式同步和集群管理等核心功能。传统物理机部署Zookeeper集群时&#xff0c;我们需要手动配置…...

3大核心突破让League-Toolkit成为英雄联盟玩家的智能游戏助手

3大核心突破让League-Toolkit成为英雄联盟玩家的智能游戏助手 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 在快节奏的英雄联盟对局中&#…...

RPA文件深度解析与高效提取指南:从原理到实战的完整解决方案

RPA文件深度解析与高效提取指南&#xff1a;从原理到实战的完整解决方案 【免费下载链接】unrpa A program to extract files from the RPA archive format. 项目地址: https://gitcode.com/gh_mirrors/un/unrpa 问题定位&#xff1a;RPA文件的技术挑战与解决方案 识别…...

3步掌握Fooocus核心架构:从零构建专业级AI图像生成工作流

3步掌握Fooocus核心架构&#xff1a;从零构建专业级AI图像生成工作流 【免费下载链接】Fooocus Focus on prompting and generating 项目地址: https://gitcode.com/GitHub_Trending/fo/Fooocus Fooocus作为基于Stable Diffusion XL架构的开源AI图像生成软件&#xff0c…...