"多伦多面微软被LeetCode 284暴打?Python解法让我原地裂开!"

多伦多面微软被LeetCode 284暴打?Python解法让我原地裂开! :scream:

家人们谁懂啊!今天面微软多伦多SDE岗,直接被LeetCode 284. Peeking Iterator干碎了:broken_heart:!

题目看着人畜无害,结果写Python的时候疯狂踩坑:hole:!Iterator的next()和peek()逻辑绕得我头皮发麻:exploding_head:,最后硬是没AC,面试官表情逐渐凝固:snowflake:……

复盘发现关键点:
:one: 要缓存peek()的值,不然next()直接GG
:two: Python的StopIteration异常处理写到手抖:raised_hand:
:three: 面试紧张+时间压力=代码像屎山:poop:

求问大佬们有没有优雅解法?或者微软是不是特爱考这种“简单但细节爆炸”的题啊?:folded_hands:

class PeekingIterator:  
    def __init__(self, iterator):  
        self.iterator = iterator  
        self.peeked = None  # 这里没处理好直接裂开  

    def peek(self):  
        if self.peeked is None:  
            self.peeked = next(self.iterator)  # 忘记try-catch了啊啊啊  
        return self.peeked  

    def next(self):  
        if self.peeked is not None:  
            val = self.peeked  
            self.peeked = None  
            return val  
        return next(self.iterator)  # 这里又双叒叕可能抛异常!  

总结:微软,不愧是你:crown:……下次见到Iterator先磕个头再写码:man_bowing: #北美求职 #LeetCode噩梦

哎呦喂,微软这题出的真叫一个绝啊!:sweat_smile: 俺在多伦多刷题群里见过这题,Python的iterator特性整得人贼闹心!关键得用collections.deque缓存peek值,再配合hasNext()判断,不然StopIteration分分钟教你做人:exploding_head:。建议下次直接套模板:先写异常处理,再搞peek缓存,微软就爱考这种“看着简单实则暗藏杀机”的题!:flexed_biceps: 加油整,下次面Azure组记得带暖宝宝,面试官手冷的时候递一个说不定能加分(不是):snowflake:

200

多伦多微软面试果然考的是细节啊!Python解LeetCode 284简直让我头疼,细节问题多到我想砸电脑:exploding_head:。下次得先仔细琢磨Iterator再写代码:laptop:。看来微软真的喜欢这种细节爆炸的题目啊!:crown:#北美求职 #LeetCode噩梦

面试微软SDE岗,LeetCode 284题真的坑爹啊!Python解法让我抓狂! :scream:
题目原本看起来简单,却是细节满满,写Python代码时一路跌坑! :hole:
面试紧张+时间紧迫,代码最后烂得像坨粑粑… :poop:

在多伦多用CIBC的Tap功能买Tim’s咖啡真的超快,感应支付超方便:hot_beverage:!

有意思的是,你说用deque缓存peek值,我之前帮孙子做编程作业时也差点被这个绕死。没少提醒他这些iterator一不小心就StopIteration,弄不好就跑断了。后来我建议他写个小函数专门处理异常,结果还是得多调试几遍才稳,有时候网速慢,还得一边等输出一边心慌。你这套路听着挺实用,我倒要问问,这套路是不是只适合微软面试?别的大厂比如Amazon或者Google也常用这种考法吗?