JavaScript中二次函数的大O时间效率

JavaScript中二次函数的大O时间效率,javascript,big-o,logarithm,quadratic,Javascript,Big O,Logarithm,Quadratic,我试图提高函数的效率。它现在是二次的,我想把它变成对数 当前函数的第三行到最后一行也让我有些困惑,我想澄清一下 function solution(arr){ let result = 0 for ( let i = 0; i < arr.length; i++) for (let j = 0; j < arr.length; j++) if (arr[i] == arr[j]) result =

我试图提高函数的效率。它现在是二次的,我想把它变成对数

当前函数的第三行到最后一行也让我有些困惑,我想澄清一下

function solution(arr){
   let result = 0
    for ( let i = 0; i < arr.length; i++)
        for (let j = 0; j < arr.length; j++)
            if (arr[i] == arr[j])
                result = Math.max(result, Math.abs(i - j));
         return result;
 }
功能解决方案(arr){
设结果=0
for(设i=0;i

我如何解决这个问题

至少,您可以更改循环的索引,省略自检,并再次检查相同的对

function solution(arr){
    let result = 0
    for (let i = 0; i < arr.length - 1; i++)
        for (let j = i; j < arr.length; j++)
            if (arr[i] === arr[j])
                result = Math.max(result, Math.abs(i - j));
    return result;
}

在上面的函数中,目标是从数组中找到最大数。现在,第三行到最后一行的含义是
result=Math.max(result,Math.abs(i-j)),我将分为两部分在这里进行解释

首先,将执行
Math.abs(i-j)
,并提供
i
j
之间差值的绝对值

在此之后,将调用外部函数
Math.max()
方法,该方法将为您提供从第一步获得的
result
绝对值之间的最大值。现在,最大值将存储在
result
中。这就是函数的工作方式

现在,该语句是基于条件的,这意味着它将仅在
arr[i]==arr[j]
时执行


我希望它清理了这个项目的工作流程

欢迎来到Stackoverflow!请记住,SO不是一个通用的帮助论坛,如果您有已经运行的代码,但您希望对其进行改进/优化,那么SO不是一个合适的地方。看看你是否想要帮助改进一些有效的东西,而不是询问如何修复那些不起作用的代码(或者开始尝试自己重写代码,然后一旦你因为代码没有做你认为应该做的事情而陷入困境,在这里问一下),这可以在线性时间内解决
让j=i+1
确实已经大大提高了性能,因为线性时间你需要一张地图。有什么让你困惑?