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

华为OD机试 - 找等值元素(Java 2024 E卷 100分)

在这里插入图片描述

华为OD机试 2024E卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(E卷+D卷+A卷+B卷+C卷)》。

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

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

例如

输入数组nums为

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

  1. 对于 num[0][0]= 0,不存在相等的值;
  2. 对于 num[0][1] = 3,存在一个相等的值,最近的坐标为num[1][4],最小距离为4;
  3. 对于 num[0][2]= 5,存在两个相等的值,最近的坐标为num[1][1],故最小距离为2;
  4. 对于num[1][1]= 5,存在两个相等的值,最近的坐标为num[2][1],故最小距离为1;

输出

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

二、输入描述

  1. 输入第一行为二维数组的行
  2. 输入第二行为二维数组的列
  3. 输入的数字以空格隔开

三、输出描述

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

四、补充说明

  1. 针对数组num[i][j],满足0<i<=100;0<j<=100;
  2. 对于每个数字,最多存在100个与其相等的数字;

五、解题思路

  1. 首先,根据输入的行数和列数创建一个二维数组 doubleArr;
  2. 将输入的数字填充到二维数组中;
  3. 创建一个HashMap map,用于统计数组中相同数字的位置;Key为数字,Value为对应数字的坐标数组;
  4. 遍历二维数组,对于每一个元素,找出与其相等的其他元素的最小距离;
    • 初始化最小距离为最大整数;
    • 对于当前元素的数字,通过HashMap map 获取所有相等的数字的坐标数组;
    • 遍历相等数字的坐标数组,计算当前元素与其他相等元素的距离,并更新最小距离;
    • 将最小距离存储到当前元素的位置;
  5. 将二维数组转换为字符串形式,并返回作为结果;

六、Java算法源码

public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();int[][] doubleArr = new int[n][m];// 将数组放入二维数组中for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {doubleArr[i][j] = sc.nextInt();}}System.out.println(get(doubleArr, n, m));
}public static String get(int[][] doubleArr, int n, int m) {// 统计输入矩阵中,相同数字的位置Map<Integer, ArrayList<Integer[]>> map = new HashMap<Integer, ArrayList<Integer[]>>();for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {Integer num = doubleArr[i][j];Integer[] arr = {i, j};map.putIfAbsent(num, new ArrayList<>());map.get(num).add(arr);}}// 遍历矩阵每一个元素,和其他相同数字的位置求距离,取最小距离for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {int num = doubleArr[i][j];int min = Integer.MAX_VALUE;for (Integer[] arr : map.get(num)) {int a = arr[0];int b = arr[1];// 求最小距离if (a != i || b != j) {int temp = Math.abs(a - i) + Math.abs(b - j);min = Math.min(min, temp);}}doubleArr[i][j] = min == Integer.MAX_VALUE ? -1 : min;}}return Arrays.toString(Arrays.stream(doubleArr).map(Arrays::toString).toArray(String[]::new));
}

七、效果展示

1、输入

3
4
0 1 2 3
2 3 4 5
5 3 2 1

2、输出

[[-1, 4, 2, 3], [3, 1, -1, 4], [4, 1, 2, 4]]

3、说明

只有1个0,输出-1;
有两个1,距离4;
有三个2,距离一个3,一个2,取最小的值,所以为2;
有三个3,距离一个3,一个4,取最小的值,所以为3;

以此类推。

在这里插入图片描述


🏆下一篇:华为OD机试 - 简易内存池 - 逻辑分析(Java 2024 E卷 200分)

🏆本文收录于,华为OD机试(JAVA)真题(E卷+D卷+A卷+B卷+C卷)

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述


http://www.mrgr.cn/news/38822.html

相关文章:

  • PowerShell脚本在自动化Windows开发工作流程中的应用
  • 主流仿真软件Sigrity/HFSS/Siwave/Hyperlynx/ADS差异
  • 大堆对象是如何影响程序的性能的
  • 进销存软件:数字化转型下的企业运营新引擎
  • 2024.9.23-2024.9.29组会报告
  • 关于将inet引入的相关问题
  • 【快速删除 node_modules 】rimraf
  • MDIO Frame介绍
  • Unity中判断平面上两条线段是否有交点代码参考
  • leetcode641. 设计循环双端队列
  • Vue 之组件插槽Slot用法(组件间通信一种方式)
  • 磁盘管理器
  • python 02 List
  • C#知识|基于反射和接口实现抽象工厂设计模式
  • 四个方法,隐藏word文件中的内容!
  • 零基础学习AI大模型,手把手带你从入门到实践!看过的已经月入6w了!
  • 【Python大语言模型系列】开源机器人对话系统框架RASA介绍与使用(案例分析)
  • 电子相册|智能化电子相册|基于java的电子相册管理系统设计与实现(源码+数据库+文档)
  • 【吊打面试官系列-MySQL面试题】优化MySQL数据库的方法?
  • win10安装Java闪退