※ 引述《unixxxx (皓皓)》之銘言:
: ※ 引述《oopFoo》之銘言
: : 這題應該是用dict,而不是set。用dict來紀錄字元的位置,這樣就不用while來重找。
: : 面試官對你很好,提示你不要用while,讓你想其它方法,可惜你卡在n2,2n的問題上。
: 2n是分析出來的結果
: 可是平常工作都不會去看程式的邏輯啊
這不是一個 code reviewer 該有的心態
如果你在意這段程式碼,把它看懂是你的責任
如果你有建議你可以跟原作者說,你可以要求他改或封裝
如果你不在意的話,那你幹嘛管它的複雜度
: 程式要寫的讓人看得懂
: 直觀 易讀 比複雜度重要才是
原作者的寫法很明顯是 O(N)
一個 while 迴圈擺在那,很難不去看他的終止條件
現實生活中,如果你看到一個這樣的演算法
你也會想去搞懂他為什麼寫出個 O(N^2)
然後一看裡面那個迴圈馬上就會知道
其實裡面那個迴圈在所有外圈跑完以後只會執行 N 次
此外,直觀易讀並不是一個單一維度的問題
他可以硬是把它做成一層迴圈
造成你輕易的判斷他是線性複雜度(其實單一迴圈也不代表線性複雜度)
結果卻讓其他的部分變得很難理解,這並不叫做直觀
大家說原 po 運氣不好
我覺得原 po 運氣很好,面試官在面試的時候就展現出了剛愎自用的性格
就算你真的進去了,以後也很難相處