※ 引述《unixxxx (皓皓)》之铭言:
: ※ 引述《oopFoo》之铭言
: : 这题应该是用dict,而不是set。用dict来纪录字符的位置,这样就不用while来重找。
: : 面试官对你很好,提示你不要用while,让你想其它方法,可惜你卡在n2,2n的问题上。
: 2n是分析出来的结果
: 可是平常工作都不会去看程式的逻辑啊
这不是一个 code reviewer 该有的心态
如果你在意这段程式码,把它看懂是你的责任
如果你有建议你可以跟原作者说,你可以要求他改或封装
如果你不在意的话,那你干嘛管它的复杂度
: 程式要写的让人看得懂
: 直观 易读 比复杂度重要才是
原作者的写法很明显是 O(N)
一个 while 循环摆在那,很难不去看他的终止条件
现实生活中,如果你看到一个这样的算法
你也会想去搞懂他为什么写出个 O(N^2)
然后一看里面那个循环马上就会知道
其实里面那个循环在所有外圈跑完以后只会执行 N 次
此外,直观易读并不是一个单一维度的问题
他可以硬是把它做成一层循环
造成你轻易的判断他是线性复杂度(其实单一循环也不代表线性复杂度)
结果却让其他的部分变得很难理解,这并不叫做直观
大家说原 po 运气不好
我觉得原 po 运气很好,面试官在面试的时候就展现出了刚愎自用的性格
就算你真的进去了,以后也很难相处