题目描述
给一个二维数组nums,对于每一个元素nums[i],找出距离最近的且值相等的元素,输出横纵坐标差值的绝对值之和,如果没有等值元素,则输出-1。
输入描述
输入第一行为二维数组的行
输入第二行为二维数组的列
输入的数字以空格隔开。
输出描述
数组形式返回所有坐标值。
用例
| 输入 | 3 5 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]] |
| 说明 | 无 |
题目解析
首先遍历输入的矩阵,将相同数字的位置整理到一起。
然后再遍历一次输入的矩阵,找到和遍历元素相同的其他数字(通过上一步统计结果快速找到),求距离,并保留最小的距离。
上面逻辑的算法复杂度为O(n*m*k),其中n是输入矩阵行,m是输入矩阵列,k是每组相同数字的个数,可能会达到O(N^3)的时间复杂度。
有一个优化点就是,遍历元素A找其他相同数字B时
该博客介绍了华为在线开发者(OD)机试中的一道算法题,要求在二维数组中找到每个元素最近的等值元素,并计算横纵坐标差值的绝对值之和。如果找不到等值元素,则返回-1。博主详细解析了题目,提出先整理相同数字的位置,再遍历矩阵寻找最小距离,讨论了算法复杂度为O(n*m*k)。同时,提到了一种优化策略,即缓存距离以减少重复计算,但需根据用例数量级判断是否实施。
订阅专栏 解锁全文
6213

被折叠的 条评论
为什么被折叠?



