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
确实已经大大提高了性能,因为线性时间你需要一张地图。有什么让你困惑?