华为OD机试真题 JavaScript 实现【相同数字的积木游戏1】【2023Q2 100分】

在这里插入图片描述

一、题目描述

小华和小薇一起通过玩积木游戏学习数学。

他们有很多积木,每个积木块上都有一个数字,积木块上的数字可能相同。

小华随机拿一些积木挨着排成一排,请小薇找到这排积木中数字相同且所处位置最远的2块积木块,计算他们的距离。

小薇请你帮忙替解决这个问题。

二、输入描述

第一行输入为N,表示小华排成一排的积木总数。

接下来N行每行一个数字,表示小华排成一排的积木上数宇。

三、输出描述

相同数宇的积木的位置最远距离;

如果所有积木数字都不相同,请返回-1。

四、补充说明

0<=积木上的数字<109

1<=积木长度<=105

五、解题思路

  1. 首先读取输入的积木总数 N;
  2. 创建一个哈希表 map,用于缓存积木上的数字及其最后出现的位置;
  3. 初始化最大距离 max 为 -1;
  4. 针对每个积木,依次进行以下操作:
    • 读取积木上的数字 num;
    • 如果 map 中已经存在相同的数字 num,则计算当前位置与上次出现位置的距离 distance;
    • 将 distance 与 max 比较,取较大值作为新的 max;
    • 如果 map 中不存在当前数字 num,则将其加入 map,键为数字,值为当前位置;
  5. 输出最大距离 max,如果所有积木数字都不相同,则输出 -1;

六、JavaScript算法源码

function findFarthestDistance(N, input) {
    const numbers = input.split(" ")
    const map = new Map();
    let max = -1;

    for (let i = 0; i < N; i++) {
        const num = numbers[i];
        if (map.has(num)) {
            const distance = i - map.get(num);
            max = Math.max(distance, max);
        } else {
            map.set(num, i);
        }
    }

    return max;
}

七、效果展示

1、输入

5
1
2
3
2
1

2、输出

4

3、说明

很明显,距离最远的相同的数是1。

华为OD机试真题 JavaScript 实现【相同数字的积木游戏1】【2023Q2 100分】_第1张图片


下一篇:华为OD机试真题 JavaScript 实现【相对开音节】【2022Q4 100分】,附详细解题思路

本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)

每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

你可能感兴趣的:(游戏,javascript,算法,华为,开发语言)