首页 > 解决方案 > 这是线性时间还是二次时间?使用相同的循环进行多次迭代

问题描述

这是一个多指针的 hacky 实现,用于确定数组是否包含唯一值。但我这样做的方式是多次循环,跳过 OG 指针。

这是线性的还是二次的?

function uniqueAll(arr) {

let i = 0
for (let j = 1; j < arr.length; j++) {
    console.log(`i: ${arr[i]} j: ${arr[j]}`)

    if (j === i) continue;

    if (j === arr.length - 1 && i < arr.length - 1) {
        i++
        j = 0
    }
    if (arr[j] === arr[i]) 
        return false
}

return true
}

是的,我知道它可能很简单:

let isUnique = (arr) => [... new Set(arr)].length === arr.length

我正在探索其他选择。

标签: javascriptalgorithmdata-structures

解决方案


对于包含所有唯一项的数组,它将为每个项运行一个循环。因此,最坏情况的复杂度肯定是二次的。


推荐阅读