Python刷LeetCode 150题记录分享

继上次 100 道记录过了 20 天...

https://www.v2ex.com/t/491308#reply87

用了两个月刷了 100 只,这次用了 20 天完成了 50 只,有点进步,^_^。

坚持刷感觉思路会变得清晰,Debug,逻辑,写之前的分析等等都有一个明确的框架去展开填充。

最后是 Github 有需要的小伙伴可以看一下~

√ Python √ 思路历程 √ 踩坑经过 √ 经验总结 × 企图涨 star

https://github.com/HuberTRoy/leetCode


Python刷LeetCode 150题记录分享

2 回复

看到你在刷LeetCode 150题,这确实是提升算法能力的经典路径。我刷过几遍,分享点实战心得。

核心策略: 别一上来就硬刚,先按类型分类刷。比如先集中搞定“数组/字符串”,再攻“链表”,然后是“二叉树”、“回溯”、“动态规划”这些大块头。每个类型都有固定套路,集中刷容易形成肌肉记忆。

代码示例(以“无重复字符的最长子串”为例): 这是滑动窗口的典型题,很多人会写O(n²)的暴力解,但用哈希表+双指针可以降到O(n)。

def lengthOfLongestSubstring(s: str) -> int:
    # 哈希表记录字符最后出现的位置
    char_index = {}
    left = 0
    max_len = 0
    
    for right in range(len(s)):
        # 如果字符已存在且在当前窗口内,移动左指针
        if s[right] in char_index and char_index[s[right]] >= left:
            left = char_index[s[right]] + 1
        
        # 更新字符位置
        char_index[s[right]] = right
        # 更新最大长度
        max_len = max(max_len, right - left + 1)
    
    return max_len

关键点:

  • char_index[s[right]] >= left 确保重复字符在当前窗口内
  • 每次右指针移动时都更新最大长度
  • 时间复杂度O(n),空间复杂度O(min(m,n)),m为字符集大小

实用建议:

  1. 每道题至少手写两遍:一遍看答案理解,一遍自己实现
  2. 用Python内置数据结构(deque、heapq、defaultdict)能简化很多代码
  3. 遇到难题时,先想暴力解,再找优化点
  4. 定期复盘错题,特别是边界条件处理

一句话总结: 按类型刷题,理解套路比题海战术更重要。


回到顶部