2024-10-09 08:30
[LC.3311 耍笨紀錄]
python寫多了有時候真的是會不小心犯一些比較基本的錯誤
想說滿確定是O(N)解 LC. 3311了,怎麼五萬的測資能讓我TLE?
本來以為常數太大,因為初版確實直接偏爆搜來建構2D圖,拆開來看發現常數好像有機會來到1千,可能真的是太大(?),那就改寫直接再建一個dict來O(1)判兩個node是否在對角,再跑一次還是TLE,What?
仔細一看原來是我使用到values()了
一般來說dict的用法是
if key in dict:
//做該做的事
這個查找是O(1)
但我在想改找value的時候,使用了
if value in dict.values():
這cost就不是O(1)而是O(len(dict)),所以其實我以為的O(N)早來到O(N^2)了
對調key, value再建一個dict就AC了
為了這問題搞了一個下午XD
寫python還是要時時刻刻小心,確實很多python build-in優化的極好,LC的測資又很軟,常常爆複雜度還是能過,但分析複雜度的時候還是要對各build-in function有相當敏感度