1 回答

TA貢獻1820條經驗 獲得超9個贊
第一個解決方案
好吧,你必須考慮一件事,尤其是在第一個解決方案中,split, slice and indexOf
方法都有自己的時間復雜度。
假設你在雜志上有 m 封信。當你將它拆分成數組時,你已經在那里使用了 O(m) 時間復雜度(當然還有 O(m) 空間復雜度,因為你將它全部存儲在一個大小為 m 的新數組中)。
現在您輸入一個將運行 n 次的 for 循環(其中 n 是 ransomNote 中的字母數)。所以就在那時和那里你有 O(m * n) 時間復雜度。indexOf 操作也將被調用 n 次,但需要注意的是每次調用時它都會運行 O(m)。您可以在那里看到您開始增加時間復雜度的速度有多快。
我認為它類似于 O(3 * m * n^2) ,它四舍五入到O(m * n^n)時間復雜度。我強烈建議不要indexOf
多次調用,只需調用一次并將其結果存儲在某處。你要么有一個索引,要么-1
意味著找不到它。
第二種解決方案
好多了。在這里你填充了一個哈希映射(所以使用了一些額外的內存,但考慮到你也首先使用了一個拆分并存儲它,它應該大致相同)。
然后你只需簡單地循環遍歷 randomNote 并在 hashMap 中找到一個字母。在地圖中查找一個字母的時間復雜度為 O(1),因此它對于此類算法非常有用。
我認為最終復雜度為O(n * m)比第一個要好得多。
希望我對你有意義。如果您愿意,我們可以在您回復后的評論中更深入地進行空間分析
添加回答
舉報