You need to enable JavaScript to run this app. JS实现查找数组差值最大两数索引的函数,要求大数在小数右侧
优惠活动
大模型
产品
解决方案
定价
更多

JS实现查找数组差值最大两数索引的函数,要求大数在小数右侧

现有代码问题
  • 对原数组直接调用sort()会改变原数组顺序,且你拿到的索引是排序后数组的索引,不是原数组的真实索引,完全不符合需求
  • JS默认sort()是按字符串字典序排序,比如[10, 2]排序后会得到[10,2],数值排序逻辑本身就存在错误
  • 没有考虑全局最小值在全局最大值右侧时,仍可能存在次小值在某个较大值左侧、差值为所有合法组合中最大的情况,比如测试用例[13, 6, 3, 4, 10, 2, 3]中全局最小值2的索引是5,后面没有更大的值,但索引2的3后面存在索引4的10,差值7为最大合法差值,你的代码会直接返回空,逻辑完全错误
  • 你写的函数调用传入了两个参数,但函数定义只接收一个参数,属于语法错误
正确实现思路

一次遍历数组即可完成计算:记录当前遍历到的最小值的索引,同时计算当前元素和当前最小值的差值,不断更新最大差值对应的两个索引即可,时间复杂度O(n),空间复杂度O(1)。

正确实现代码
function getProfit(arr) {
    // 数组长度不足2直接返回空
    if (arr.length < 2) return []
    let minIndex = 0
    let maxDiff = 0
    let result = []
    for (let i = 1; i < arr.length; i++) {
        // 当前值更小,更新最小值索引
        if (arr[i] < arr[minIndex]) {
            minIndex = i
        } else {
            const currentDiff = arr[i] - arr[minIndex]
            // 当前差值大于已记录的最大差值,更新结果
            if (currentDiff > maxDiff) {
                maxDiff = currentDiff
                result = [minIndex, i]
            }
        }
    }
    // 没有合法正差值返回空,否则返回结果
    return maxDiff > 0 ? result : []
}

// 测试用例
console.log(getProfit([13, 6, 3, 4, 10, 2, 3])) // 输出 [2,4]

内容的提问来源于stack exchange,提问作者RuddaTriduba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 00:33:00