[英]What is time complexity of this solution O(N) or O(LogN)?
https://codility.com/programmers/lessons/1-iterations/
考慮到這一點:
if (largestHole > (bin.length - i) && subHole < (bin.length - i)) {
break;
}
如果到目前為止最大的孔的長度小於要檢查的其余數字的長度,則會中斷循環
這行let bin = parseInt(N, 10).toString(2);
是將數字從10轉換為2的字符串,這就是我迭代的過程。
function solution(N) {
let bin = parseInt(N, 10).toString(2);
let subHole = 0;
let largestHole = 0;
for (var i = 0; i < bin.length; i++) {
if (largestHole > (bin.length - i) && subHole < (bin.length - i)) {
break;
}
if (bin[i] === '0') { subHole++; }
else {
if (subHole > largestHole) {
largestHole = subHole;
}
subHole = 0;
}
}
return largestHole;
}
仍為O(n)。 復雜度不考慮系數。 另外,O(log n)函數將類似於二進制搜索。
編輯: O(log n)算法的簡單說明:以二進制搜索為例。 您有一個從1到100的數字x,它被隱藏在一個包含從1到100的n個數字的排序數組中。您從數組的中間開始,具體取決於中間數字與x的大小,搜索數組的左半部分或右半部分。 該過程以遞歸方式繼續進行,直到找到該數字為止。
例如,我想在[1,3,5,6,7,9,10]中找到5。 我從第四名開始。 它是6,大於5,因此我們將左半部分從1到5進行緊縮。然后,在縮小的范圍3中再次檢查中間位置。它小於5,因此我們搜索右半部分。 此時,我們只剩下一個數字-5。
搜索將數組一分為二,因此最壞的情況將是log 2 n(n的以2為底的對數)。 那是一個O(log n)函數。
但是,正如我所說,復雜度的系數並不重要。 例如,冒泡排序通常需要大約(n ^ 2)/ 2圈,但我們將其簡單地計算為O(n ^ 2),而忽略了1/2系數。
我同意O(n),但實際上它取決於parseInt函數的實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.