1 回答

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