华为OD刷题C卷 - 每日刷题 13(图像物体的边界,英文输入法)

1、(图像物体的边界):

这段代码是解决“图像物体的边界”的问题。它提供了一个Java类Main,其中包含main方法和getResult方法,以及一个内部UnionFindSet类,用于计算像素1代表的物体的边界个数。

main方法首先读取二维数组的行数m和列数n,然后读取二维数组matrix中的像素值。接着,调用getResult方法并打印结果。

getResult方法首先找出所有与像素5相邻的像素1的格子,并将它们作为边界存储在ArrayList中。然后,使用并查集UnionFindSet来合并相邻的边界。并查集通过比较边界像素之间的距离来确定它们是否相邻,从而将属于同一个边界的像素合并到同一个集合中。

最后,UnionFindSet中的count变量存储了最终的边界数量,并作为结果返回。

2、(英文输入法):

这段代码是解决“英文输入法”的问题。它提供了一个Java类Main,其中包含main方法和match方法,用于实现英文输入法的单词联想功能。

main方法首先读取一段由英文单词和标点符号组成的语句s,然后读取一个英文单词前缀pre。接着,调用match方法并打印匹配到的单词序列。

match方法使用正则表达式将输入语句s分割成单词数组。然后,遍历单词数组,使用TreeSet来存储所有以pre为前缀的单词。TreeSet自动对单词进行排序并避免重复。如果TreeSet为空,则返回前缀pre;否则,使用StringJoiner将排序后的单词序列拼接成字符串并返回。

package OD231;import java.util.ArrayList;
import java.util.Scanner;/*** @description 图像物体的边界* @level 7* @score 200* @url https://hydro.ac/d/HWOD2023/p/OD231*/
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {private static int m;private static int n;private static int[][] matrix;//坐标偏移private static int[][] offsets = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}, {-1, -1}, {-1, 1}, {1, -1}, {1, 1}};public static void main(String[] args) {Scanner sc = new Scanner(System.in);m = sc.nextInt();n = sc.nextInt();matrix = new int[m][n];for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {matrix[i][j] = sc.nextInt();}}//输出System.out.println(getResult());}public static int getResult() {//记录所有边界位置ArrayList<Integer[]> brand = new ArrayList<>();for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {//如果是像素5,则扩散if (matrix[i][j] == 5) {for (int[] offset : offsets) {int newI = i + offset[0];int newJ = j + offset[1];//如果新位置不越界且为像素1,则是边界if (newI >= 0 && newI < m && newJ >= 0 && newJ < n && matrix[newI][newJ] == 1) {brand.add(new Integer[]{newI, newJ});}}}}}int k = brand.size();//并查集,对所有边界位置进行合并UnionFindSet ufs = new UnionFindSet(k);for (int i = 0; i < k; i++) {int x1 = brand.get(i)[0];int y1 = brand.get(i)[1];for (int j = i + 1; j < k; j++) {int x2 = brand.get(j)[0];int y2 = brand.get(j)[1];//如果两个边界像素1的位置横向、纵向距离均小于1,则相邻,合并//即所有绕格子5的一圈格子1是一个连通集,边界归于1,如果两个5的一圈边界有相邻,则会归于一个if (Math.abs(x1 - x2) <= 1 && Math.abs(y1 - y2) <= 1) {//合并一次则边界-1ufs.union(i, j);}}}//返回边界数量return ufs.count;}}//并查集实现
class UnionFindSet {//根节点int[] fa;//边界个数int count;public UnionFindSet(int n) {this.count = n;this.fa = new int[n];//初始化根节点是自己for (int i = 0; i < n; i++) {fa[i] = i;}}public int find(int x) {if (x != this.fa[x]) {this.fa[x] = this.find(this.fa[x]);return this.fa[x];}return x;}public void union(int x, int y) {int x_fa = this.find(x);int y_fa = this.find(y);//如果两个不同根,则合并if (x_fa != y_fa) {this.fa[x_fa] = y_fa;//边界-1this.count--;}}
}
package OD232;import java.util.*;/*** @description 英文输入法* @level 6*//*** 题目描述* 主管期望你来实现英文输入法单词联想功能。* <p>* 需求如下:* <p>* 依据用户输入的单词前缀,从已输入的英文语句中联想出用户想输入的单词,按字典序输出联想到的单词序列,* 如果联想不到,请输出用户输入的单词前缀。* 注意:* <p>* 英文单词联想时,区分大小写* 缩略形式如”don’t”,判定为两个单词,”don”和”t”* 输出的单词序列,不能有重复单词,且只能是英文单词,不能有标点符号* 输入描述* 输入为两行。* <p>* 首行输入一段由英文单词word和标点符号组成的语句str;* <p>* 接下来一行为一个英文单词前缀pre。* <p>* 0 < word.length() <= 20* 0 < str.length <= 10000* 0 < pre <= 20* 输出描述* 输出符合要求的单词序列或单词前缀,存在多个时,单词之间以单个空格分割*/
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);//读取输入String s = sc.nextLine();//前缀匹配String pre = sc.nextLine();System.out.println(match(pre, s));}//根据前缀匹配单词public static String match(String pre, String str) {//把单词用非字母分隔开String[] words = str.split("[^a-zA-Z]");//存放前缀匹配成功的单词 防重复,TreeSet自动升序TreeSet<String> list = new TreeSet<>();for (String word : words) {if (word.startsWith(pre)) {list.add(word);}}if (list.isEmpty()) {return pre;} else {StringJoiner result = new StringJoiner(" ");//按字典排序list.forEach(result::add);return result.toString();}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/23275.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#操作MySQL从入门到精通(11)——对查询数据使用正则表达式过滤

前言 对于之前提到的使用匹配、比较、通配符等过滤方式能解决大部分的项目问题,但是有时候也会遇到一些比较复杂的过滤需求,这时候就需要正则表达式来实现了,正则表达式使用regexp这个关键字来实现。 本次测试的数据库表的内容如下: 1、基本字符匹配(包含某些字符) 匹…

嵌入式之存储基本知识

系列文章目录 嵌入式之存储基本知识 嵌入式之存储基本知识 系列文章目录一、RAM与ROM二、DRAM和SRAM三、SDRAM&#xff08;DRAM的一种&#xff09;四、DDR 一、RAM与ROM RAM&#xff08;随机存取存储器&#xff09;和ROM&#xff08;只读存储器&#xff09;是两种不同类型的计…

揭秘VVIC API:开启高效数据交互的密钥,你的项目就差这一步

VVIC API接口概述 VVIC API提供了对VVIC服务的数据访问和操作功能。通过此API&#xff0c;开发者可以集成VVIC服务到他们的应用程序中&#xff0c;实现数据同步、用户认证、资源管理等功能。 点击获取key和secret API端点示例 用户认证 方法&#xff1a;POSTURL&#xff1a;/…

【JS】JavaScript编程语言-(Object)对象属性标志与对象属性描述符(2024-06-05)

我们知道&#xff0c;对象可以存储属性。 到目前为止&#xff0c;属性对我们来说只是一个简单的“键值”对。但对象属性实际上是更灵活且更强大的东西&#xff1a;其他配置选项。 1、属性标志 对象属性&#xff08;properties&#xff09;&#xff0c;除 value 外&#xff0c…

Nvidia Jetson/Orin +FPGA+AI大算力边缘计算盒子:无人机自主飞行软件平台

案例简介 北京泛化智能科技有限公司&#xff08;gi&#xff09;所主导开发的 Generalized Autonomy Aviation System (GAAS) 是为无人机以及城市空中交通 (UAM, Urban Air Mobility) 所设计的开源无人机自主飞行框架。通过 SLAM、路径规划和 Global Optimization Graph 等功能…

【Linux】(三)—— 文件管理和软件安装

文件管理 Linux的文件管理是系统管理中的核心部分&#xff0c;它涉及到如何组织、访问、修改和保护文件及目录结构。 目录 文件管理基本概念常用命令查看和切换目录创建文件和目录删除文件和目录文件拷贝移动和重命名文件文件查看cat文件查看more查找文件查找文本 数据流和管道…

redsystems教程的基本使用之重置密码(忘记密码解决方法)

前言&#xff1a; 相信很多人都有疑惑&#xff0c;要是我不记得密码怎么办&#xff1f;如果你登录了&#xff0c;点击更改密码后&#xff0c;还是要你填写登录密码才能修改。为了解决这问题&#xff0c;博主通过了钻研成功搞出来了&#xff01;&#xff01;&#xff01;&#…

DS:数与二叉树的相关概念

欢迎来到Harper.Lee的学习世界&#xff01;博主主页传送门&#xff1a;Harper.Lee的博客主页想要一起进步的uu可以来后台找我哦&#xff01; 一、树的概念及其结构 1.1 树的概念亲缘关系 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限节点…

Marvelous Designer中一些棉质布料预设

Marvelous Designer中一些棉质布料预设的解释&#xff1a; Cotton_14_Wale_Corduroy&#xff1a;14条细鲸鱼纹的灯芯绒&#xff0c;适合制作温暖且有质感的服装。Cotton_40s_Chambray&#xff1a;40支精梳针织的府绸布&#xff0c;通常用于制作休闲衬衫。Cotton_40s_Poplin&am…

Nginx目录文件

Nginx目录文件 在 Nginx 的安装目录下&#xff0c;你可能会看到许多文件夹和文件。以下是对各个文件夹和文件的简要解释&#xff1a; conf.d: 这个文件夹通常用于存放额外的配置文件。Nginx 在启动时&#xff0c;会读取该文件夹下的所有配置文件&#xff0c;并将其内容合并到…

Face Forgery Detection by 3D Decomposition

文章目录 Face Forgery Detection by 3D Decomposition研究背景研究目标创新点方法提出问题研究过程技术贡献实验结果未来工作Face Forgery Detection by 3D Decomposition 会议:CVPR2021 作者: 研究背景 面部伪造引发关注传统面部伪造检测主要关注原始RGB图像

邮箱地址验证软件

邮箱地址验证软件是一种用于检测邮箱地址是否真实存在、有效和可送达的工具。这些软件通常服务于邮件营销、客户数据清洗或研究领域&#xff0c;以帮助用户提高邮件发送的成功率并减少 bounce rate&#xff08;退回率&#xff09;。易邮地址验证软件就是这么一款软件。 易邮件…

学Python,看一篇就够

学Python&#xff0c;看一篇就够 python基础注释变量标识符命名规则使用变量认识bugDebug工具打断点 数据类型输出转义字符输入输入语法输入的特点 转换数据类型pycharm交互运算符的分类赋值运算符复合赋值运算符比较运算符逻辑运算符拓展 条件语句单分支语法多分支语法拓展 if…

XFF注入【墨者靶场】

目录 XFF介绍 靶场练习 最近在复习XFF注入&#xff0c;这里使用墨者靶场来简单的练习一下该漏洞的利用方法 XFF介绍 X-Forwarded-For&#xff1a;简称XFF头&#xff0c;代表了HTTP的请求端真实的IP。 它被认为是客户端通过HTTP代理或者负载均衡器连接到web服务端获取源ip地…

植物大战僵尸杂交版2.0.88最新版安装包

游戏简介 游戏中独特的杂交植物更是为游戏增添了不少亮点。这些杂交植物不仅外观独特&#xff0c;而且拥有更强大的能力&#xff0c;能够帮助玩家更好地应对游戏中的挑战。玩家可以通过一定的条件和方式&#xff0c;解锁并培养这些杂交植物&#xff0c;从而不断提升自己的战斗…

http和websocket区别

HTTP和WebSocket在多个方面存在显著的区别&#xff1a; 1. 通信方式&#xff1a;HTTP协议是一种基于请求-响应模式的通信方式&#xff0c;客户端发送请求&#xff0c;服务器响应请求。这种通信方式相对简单直观&#xff0c;但它是单向的&#xff0c;即每次通信都是由客户端发起…

市政环境卫生乙级资质申请:费用详解与预算

市政环境卫生乙级资质申请的费用详解与预算如下&#xff1a; 一、基本成本 注册资本&#xff1a;根据规定&#xff0c;申请市政环境卫生乙级资质的企业需具备独立法人资格&#xff0c;且注册资本不少于100万元人民币。 二、行政与申报费用 行政性收费&#xff1a;向住房和城…

打开C# 大门:Hallo, World!

C# 介绍 C#&#xff08;C Sharp&#xff09;是一种面向对象的编程语言&#xff0c;由微软公司开发。它是 .NET Framework 的一部分&#xff0c;用于构建 Windows 应用程序、Web 应用程序、移动应用程序等。C# 语言的设计目标是简单、现代化、易于学习和使用。在本文中&#xf…

量化交易:Miniqmt获取可转债数据和交易python代码

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 低风险资产除了国债外&#xff0c;还有可转债&#xff0c;兼容有高收益的股性和低风险的债性&#xff0c;号称“下有保底&#xff0c;上不封顶”。 &#x1f50d; 可转债&#xff1a;金融市场的双面娇娃 可转债&am…

使用C++版本的opencv dnn 部署onnx模型

使用OpenCV的DNN模块在C中部署ONNX模型涉及几个步骤&#xff0c;包括加载模型、预处理输入数据、进行推理以及处理输出。 构建了yolo类&#xff0c;方便调用 yolo.h 文件 #ifndef YOLO_H #define YOLO_H #include <fstream> #include <sstream> #include <io…