[英]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.