簡體   English   中英

如何計算嵌套在 for 循環中的 while 循環的時間復雜度?

[英]How to figure out time complexity for a while loop nested in a for loop?

所以我在這里有這段代碼,我只是想了解時間和空間的復雜性。

對於時間復雜度,我認為它的 O(n^2) 因為它在 while 循環中最多經歷 n - 1 個循環,並且它會在 for 循環中通過 n 次 go 所以它將是 O(n(n-1) ) 這是 O(n^2) 和空間復雜度我認為它的 O(n) 因為它是線性空間。

我不知道我是否正確,但如果我錯了,有人可以糾正我的想法嗎? 提前致謝。

    // Write your code here
    let visited = new Array(s.length).fill(false);
    let count = 0;
    for (let i = 0; i < s.length; i++) {
        let j = i + 1;
        visited[i] = true;
        while (j < s.length && s[j] === s[i] && !visited[j]) {
            visited[j] = true;
            count++;
            j++;
        }
    }
    return count; 

這在時間復雜度上是O(n) ,因為:

while (j < s.length && s[j] === s[i] && !visited[j]) {

要滿足這個條件, visited[j]需要為假,當它滿足時,你就可以

visited[j] = true;

因此,上述行只能運行與visited數組中的項目一樣多的次數。 如果while循環運行到第一個外部迭代的末尾(當i為 0 時),那么它將永遠不會在任何其他外部迭代中運行。 如果while循環在第一次迭代中運行,並且在第二次迭代的另一半中運行,則它永遠不會為外部迭代的visited運行。 所以,這部分代碼:

    while (j < s.length && s[j] === s[i] && !visited[j]) {
        visited[j] = true;
        count++;
        j++;
    }

永遠不會運行超過visited.length次。

當然,外循環是O(n) 所以,你得到

outer loop: O(n)
+ inner loop: O(n) when summed over all iterations of the outer loop
= O(n)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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