任務是獲取一個數組並返回最早的重複,並且如果沒有返回-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