javascript - 这是线性时间还是二次时间?使用相同的循环进行多次迭代
问题描述
这是一个多指针的 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
我正在探索其他选择。
解决方案
对于包含所有唯一项的数组,它将为每个项运行一个循环。因此,最坏情况的复杂度肯定是二次的。
推荐阅读
- python - Python readline 将我的打印定位在下面而不是旁边
- google-chrome - 如何使警报窗口也播放声音
- c# - 列表中的动态泛型类
- android-fragments - 如何在没有活动的片段中保存状态开始破坏Android Studio
- javascript - 在使用全局唯一标识符/srcdoc 创建的 iframe 上强制执行哪个 CSP?
- javascript - 删除 html 元素中的重复内容中的字符串
- visual-studio-code - VS Code 调优:在面板中合并资源管理器、搜索和源代码控制
- flutter - 尝试从 Stream Provider 检索和显示数据时出错
- python - Flask:如何自动化 OpenAPI v3 文档?
- android - 在 Material Design Slider 中缺少 tickVisible