考慮一下Valid Anagram問題,true如果兩個字串是彼此的字謎,我們會在該問題中回傳:
e.g. validAnagram("name", "mane")回傳true。
假設我們只能按值傳入字串,一個可能的解決方案是將兩個排序后的陣列存入新的變數中,然后回傳這些變數是否相等:
func validAnagram(_ s: String, _ t: String) -> Bool {
guard s.count == t.count else { return false }
let sortedS = s.sorted()
let sortedT = t.sorted()
return sortedS == sortedT
}
在這種情況下,演算法的時間復雜度為O(nlogn),空間復雜度為O(2n) => O(n)
我的問題是將函式更改為以下是否會導致空間復雜性O(1):
func validAnagram(_ s: String, _ t: String) -> Bool {
guard s.count == t.count else { return false }
return s.sorted() == t.sorted()
}
這是真的?或者即使我沒有顯式初始化變數,記憶體仍然在后臺分配以記住什么s.sorted()和是什么?t.sorted()
uj5u.com熱心網友回復:
它沒有任何區別。您仍然為排序陣列分配記憶體。
為避免使用額外的空間,您需要在可能的情況下對資料進行就地排序。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/466749.html
上一篇:想知道這兩個幾乎相同的答案的區別
