华为OD2023(A卷)基础题27【找数字、找等值元素】

2023-11-12

华为OD机试-找数字、找等值元素

【找数字】

给一个二维数组nums,对于每一个元素num[i],找出距离最近的且值相等的元素,输出横纵坐标差值的绝对值之和,如果没有等值元素,则输出 -1。

输入描述

输入第一行为二维数组的行

输入第二行为二维数组的列

输入的数字以空格隔开。

输出描述

数组形式返回所有坐标值。

------------------------------------------------------------------------------

示例一:

输入:

0 3 5 4 2
2 5 7 8 3
2 5 4 2 4

输出:

-1 4 2 3 3 
1 1 -1 -1 4 
1 1 2 3 2 

import java.util.*;

/**
 * 主要思路:
 * 1.先遍历将相同数字的坐标放在一块
 * 2,再次遍历,求出最小坐标和
 */
public class OdAb27 {
    public static void main(String[] args) {
        // 读取输入
        Scanner scanner = new Scanner(System.in);
        int rows = scanner.nextInt(); // 行数
        int cols = scanner.nextInt(); // 列数
        Map<Integer, List<int[]>> d = new HashMap<>(); // 用于存储元素及其坐标
        int[][] l = new int[rows][cols]; // 存储结果
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++) {
                int num = scanner.nextInt();
                l[i][j] = num;
                if (!d.containsKey(num)) { // 如果字典中没有该元素
                    d.put(num, new ArrayList<int[]>()); // 添加元素及其坐标
                }
                d.get(num).add(new int[]{i, j});
            }
        }

        System.out.println(d); // 输出字典

        // 遍历二维数组,对于每个元素找到距离最近的相等元素
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++) {
                int k = l[i][j];
                int mds = Integer.MAX_VALUE; // 最小距离初始化为正无穷
                if (d.get(k).size() == 1) { // 如果该元素只出现了一次
                    l[i][j] = -1; // 直接赋值为 -1
                } else { // 如果该元素出现了多次
                    for (int[] coord : d.get(k)) {
                        if (i != coord[0] || j != coord[1]) { // 不是元素本身
                            int ds = Math.abs(coord[0] - i) + Math.abs(coord[1] - j); // 计算距离
                            mds = Math.min(mds, ds); // 更新最小距离
                        }
                    }
                    l[i][j] = (mds == Integer.MAX_VALUE ? -1 : mds); // 更新结果
                }
            }
        }

        // 输出结果
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++) {
                System.out.print(l[i][j] + " ");
            }
            System.out.println();
        }
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

华为OD2023(A卷)基础题27【找数字、找等值元素】 的相关文章

随机推荐

  • 使用IDEA搭建JavaWeb项目骨架

    前言 记得17年初的时候 尝试学习开发 JavaWeb 项目 刚开始搭建时候 真的是一头雾水 使用哪个 IDE 比较好呢 目录结构如何才是合理的呢 Tomcat 服务器如何找到项目的根目录呢 blabla 到处查资料 半信半疑的尝试 到最后
  • Wire load model

    做综合时 经常提到wire loadmodel 一直不甚了解 只知道是针对0 18um以上的工艺的一种粗略估计线延迟的模型方法 最近有时间看primepower的文档 终于有一些理解了 Wireload模型 实际上就是综合库中 若干个fan
  • android studio安装后,无法创建avd模拟器。

    win7 安装as3 5后创建avd模拟器提示错误如下 1 选择虚拟机之后出现 unkown error troubleshoot Please file a bug against Android Studio 2 查看 AndroidS
  • 【Web3 系列开发教程——创建你的第一个 NFT(5)】使用 Ethers.js 铸造 NFT

    本节文章将描述如何通过 ethers js 库使用以太币在以太坊区块链上铸造 NFT 以及我们还会讨论如何对创建的 NFT 进行基础的测试 在本文中 我们将实践一种可替代的方法 即使用 OpenZeppelin V4 库 以及 Ethers
  • 云架构师的进阶之路

    一 架构的三个维度和六个层面 1 1 三大架构 在互联网时代 要做好一个合格的云架构师 需要熟悉三大架构 第一个是IT架构 其实就是计算 网络 存储 这是云架构师的基本功 也是最传统的云架构师应该首先掌握的部分 良好设计的IT架构 可以降低
  • 刷脸支付服务商需要敏锐把握快速行动

    科技改动生活 靠脸吃饭已不是笑言 无论是饭店吃饭还是医院看病又或者搭乘公交 地铁等日常生活行为 很多场景曾经能够完成刷脸完成买卖支付环节 继手机扫码支付后 刷脸支付再次成为关注焦点 移动支付方兴未艾 刷脸支付忽然兴起 微信的这一举措 是刷脸
  • 【Antlr】修改由Antlr生成的表示式?替换遍历方式?

    1 概述 我想使用Antlr4读取表示式并且其進行一些修改 例如 如果语法是算术运算 我將修改表示式 表示 2 3 1 與 2 4 然後用 8 這是 計算 或 簡化 要執行此操作 我將建立一些樹結構 第一個想法是使用由Antlr建立的相同的
  • [网站搭建] 阿里云搭建个人网站及域名绑定

    前一篇 网站搭建 阿里云虚拟主机搭建及FTP文件上传 主要讲述了如何通过阿里云虚拟机搭建网站服务器 同时FTP上传文件 登录后进入控制台或管理界面 接下来的主要步骤如下图所示 1 获取追加信息 2 网站备案 3 上传网站数据库数据 4 网站
  • CSR867x — 广播数据设置接口以及如何添加厂商数据

    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XX 作 者 文化人 XX 联系方式 XX 版权声明 原创文章 欢迎评论和转载 转载时能告诉我一声就最好了 XX 要说的话 作者水平有
  • Visdom:Python可视化神器

    Visdom 可视化神器 项目地址 visdom 文章目录 Visdom 可视化神器 visdom实质 visdom核心概念 env 环境 pane 窗格 创建Visdom环境 常用API plot scatter plot line pl
  • 重新学javaweb---过滤器 应用--全站乱码

    之前没用过滤器的时候我们解决乱码 的办法是在每个servlet最前面加 响应乱码 response setCharacterEncoding utf 8 通知服务器 response setContentType text html cha
  • 解决VMware虚拟机Ubuntu 18.04无法上网问题!

    由于应用需要 安装了Ubuntu18 04 整体效果还不错 唯一的BUG就是网络不稳定 很容易断网 常常出现 connected failed 解决办法 1 sudo service network manager stop 2 删除之前先
  • Epoll实验总结

    Epoll实验总结 2012 09 06 15 54 10 分类 network program 标签 epoll c 举报 字号 订阅 下载LOFTER 我的照片书 一 超时实验 建立一个阻塞模式的tcp连接到一个没有监听的服务端口 肯定
  • 【vue3】vue3在父组件中调用子组件中定义的methods

    首先要区分子组件的setup的写法 写法1 子组件的setup写在
  • 声音的基础知识

    一 声音的定义 声音 sound 是由物体振动产生的声波 是通过介质 空气或固体 液体 传播并能被人或动物听觉器官所感知的波动现象 最初发出振动 震动 的物体叫声源 声音以波的形式振动 震动 传播 声音是声波通过任何介质传播形成的运动 声音
  • 【mmsegmentation模型训练deeplabv3】自定义数据集加载和训练

    目录 前言 mmsegmentation下载 mmsegmentation官网 欢迎来到 MMSegmentation 的文档 MMSegmentation 0 27 0 文档https mmsegmentation readthedocs
  • Mac os使用git,不依赖Xcode

    说明 后来发现使用mac的命令行开发者工具很香 于是又删除了下文安装的git 直接点击下图的 安装 来获取命令行开发者工具 安装路径是 Library Developer CommandLineTools 包含了git gcc g make
  • import com.google.common.* 出错,找不到

    一 问题 在启动项目的时候 import com google common base Preconditions 报错 找不到这个类 二 解决 要引入guavar依赖 Guava 中文是石榴的意思 该项目是 Google 的一个开源项目
  • JavaWeb 相关问题汇总:

    我是目录 1 输入 URL 后发生了什么事情 如何定位服务资源 2 如何接收 HTTP 请求数据 3 ajax有什么作用 4 Filter 过滤器 5 tomcat 1 输入 URL 后发生了什么事情 如何定位服务资源 通过IP找到主机 通
  • 华为OD2023(A卷)基础题27【找数字、找等值元素】

    华为OD机试 找数字 找等值元素 找数字 给一个二维数组nums 对于每一个元素num i 找出距离最近的且值相等的元素 输出横纵坐标差值的绝对值之和 如果没有等值元素 则输出 1 输入描述 输入第一行为二维数组的行 输入第二行为二维数组的