簡體   English   中英

此解決方案O(N)或O(LogN)的時間復雜度是多少?

[英]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;
}

https://codility.com/programmers/lessons/1-iterations/

仍為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM