簡體   English   中英

時間/空間復雜度

[英]Time/Space Complexity

為考試而學習。 我認為時間復雜度是 O(n^2),空間是 O(1)。 請幫忙,我說得對嗎?

public static String lastSubstring(String s) {
    
    int start=0;
    int end = start+1;
    int len =0;
    
    while (end + len < s.length()) {

        if (s.charAt(start + len) == s.charAt(end + len)) {
            len++;
        } else if (s.charAt(start + len) > s.charAt(end + len)) {
            end += len + 1;
            len = 0;
        } else {
            start = end;
            end = start + 1;
            len = 0;
        }
    }
    return s.substring(start);
}

時間復雜度為 O(n),空間復雜度為 O(1),其中 n 是輸入字符串的長度。

空間復雜度為 O(1),因為除了“start”、“end”、“len”等變量外,沒有使用額外的空間。 我在這里假設您沒有考慮返回字符串占用的空間,如果考慮到這一點,那么空間復雜度將變為 O(n),因為最壞的情況是將返回長度為 n 的完整字符串。

時間復雜度為 O(n),因為外部變量“end”僅從 0 增加到 n。 當“end”大於輸入長度 n 時,while 循環中斷。

時間復雜度應該是 O(n^2),如果對於從 0 到 n 的每個“結束”迭代,您迭代另一個內部變量,比如說從 0 到 n 的“len”。 但是在您的情況下,迭代次數是 'end' + 'len' 的函數,即使您必須從 0 重新開始 'len',迭代次數也只會上升到 n+n = 2n。 這就是為什么這里的時間復雜度是 O(n)。

暫無
暫無

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

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