一、题目描述
某探险队负责对地下洞穴进行探险。探险队成员在进行探险任务时,随身携带的记录器会不定期地记录自身的坐标,但在记录的间隙中也会记录其他数据。探索工作结束后,探险队需要获取到某成员在探险过程中相对于探险队总部的最远的足迹位置。
- 仪器记录坐标时,坐标的数据格式为(x,y),如(1,2)、(100,200),其中
0<x<1000
,0<y<1000
。同时存在非法坐标,如(01,1)、(1,01),(0,100)
属于非法坐标; - 设定探险队总部的坐标为(0,0),某位置相对总部的距离为:
x*x+y*y
; - 若两个座标的相对总部的距离相同,则第一次到达的坐标为最远的足迹;
- 若记录仪中的坐标都不合法,输出总部坐标(0,0)。
备注:
不需要考虑双层括号嵌套的情况,比如sfsdfsd((1,2))
。
二、输入描述
字符串,表示记录仪中的数据。
三、输出描述
字符串,表示最远足迹到达的坐标。
如: (10,20)
- 输入:
asdf(7,8)qwertjh45(5,7)fa65jhsdf23fg(6,8)
- 输出:
(7,8)
四、解题思路
- 读取输入的字符串;
- 定义变量 r 和 l,分别表示括号的右边界和左边界;
- 定义一个列表 list 存储合法的坐标;
- 定义一个二维列表 lists 存储所有合法的坐标;
- 遍历字符串,当遇到左括号时,记录左边界 l 的位置;当遇到右括号时,记录右边界 r 的位置;
- 如果左右边界都不为零,则表示找到了一个合法的坐标,将其提取出来并判断是否合法;
- 如果坐标合法,则将其加入到 list 中,并将 list 加入到 lists 中;
- 重置左右边界 l 和 r;
- 判断 lists 的长度,如果为零,则输出总部坐标 (0,0);否则,根据坐标的相对距离排序 lists,取第一个坐标作为最远足迹的位置;
- 输出最终结果。
五、JavaScript算法源码
function findFarthestFootprint(s) {
const regex = /\((\d+),(\d+)\)/g;
let match;
let farthestDistance = 0;
let farthestCoordinate = [0, 0];
while ((match = regex.exec(s)) !== null) {
const x = parseInt(match[1]);
const y = parseInt(match[2]);
if (isValidCoordinate(x, y)) {
const distance = x * x + y * y;
if (distance > farthestDistance) {
farthestDistance = distance;
farthestCoordinate = [x, y];
}
}
}
return `(${farthestCoordinate[0]},${farthestCoordinate[1]})`;
}
function isValidCoordinate(x, y) {
return x > 0 && x < 1000 && y > 0 && y < 1000 && !startsWithZero(x) && !startsWithZero(y);
}
function startsWithZero(num) {
return num.toString().startsWith("0");
}
六、效果展示
1、输入
asdf(7,8)qwertjh45(5,7)fa65jhsdf23fg(6,8)
2、输出
(7,8)
🏆下一篇:华为OD机试真题 JavaScript 实现【相对开音节】【2022Q4 100分】,附详细解题思路
🏆本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)
每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。