任务是获取一个数组并返回最早的重复,并且如果没有返回-1。我这样写:我需要加速通过代码格斗测试(javascript)
function firstDuplicate(a) {
let singles = [];
for (let i = 0; i < a.length; i++) {
if (singles.indexOf(a[i]) == -1) {
singles.push(a[i]);
}
else {
return a[i];
}
}
return -1;
}
它通过除隐藏速度测试以外的所有测试。有没有另一种方式来更快地写在JS?我看到一个Java解决方案使用集合而不是数组,但我想坚持使用JS。
使用散列(一个对象)来跟踪重复项而不是另一个数组。 –
使用js对象,而不是数组。因为它是一个测验,所以不会给你答案:) – Doug
首先,你应该学习'array#indexOf'如何工作。每次都会从起始位置到结束位置进行搜索。搜索是在'O(n)'这是非常缓慢的。有很多方法可以加快速度,它们都包括使用不同的策略/数据结构。更好的数据结构是'HashSet'(包含在'O(1)'中),'TreeSet'(包含在'O(log n)'中)。坚持数组时,更好的策略是*搜索算法*像'BinarySearch'或*排序技术*像'QuickSort'。我相信** JS **中已经有一些实现可用。 – Zabuza