如何查找未排序数组中相邻重复元素对的对应索引
解决方案
你当前的实现通过indexOf匹配全局首次出现位置,会筛选出所有非首次出现的重复元素,无法区分是否为相邻重复,和需求不匹配。另外原有代码还存在变量引用错误,函数作用域内没有定义totalY变量,直接调用会抛出引用错误。
实现思路
由于题目明确相邻重复对仅存在1次,我们只需遍历数组时仅对比当前元素与前一位元素的值,匹配成功直接返回对应索引即可,不需要额外处理非相邻重复项,时间复杂度为O(n),空间复杂度为O(1)。
代码实现
仅返回索引对的版本
function findAdjacentDuplicate(arr) { // 从索引1开始遍历,逐位和前一位元素对比 for (let i = 1; i < arr.length; i++) { if (arr[i] === arr[i - 1]) { // 找到相邻重复对,直接返回两个元素的索引 return [i - 1, i]; } } // 无匹配场景返回空数组,可根据业务需要调整返回值 return []; }
同时返回重复值和索引的版本
如果需要同时获取重复元素的值,可以使用如下实现:
function findAdjacentDuplicate(arr) { for (let i = 1; i < arr.length; i++) { if (arr[i] === arr[i - 1]) { return { duplicateValue: arr[i], indexes: [i - 1, i] }; } } return null; }
测试示例
输入测试数组:[9, 2, 5, 5, 7, 1, 2]
调用函数返回结果为[2,3],非相邻的重复元素2不会被识别,完全符合需求。
内容的提问来源于stack exchange,提问作者Mackina
相关产品推荐
相关产品推荐

