Python刷LeetCode 150题记录分享
继上次 100 道记录过了 20 天...
https://www.v2ex.com/t/491308#reply87
用了两个月刷了 100 只,这次用了 20 天完成了 50 只,有点进步,^_^。
坚持刷感觉思路会变得清晰,Debug,逻辑,写之前的分析等等都有一个明确的框架去展开填充。
最后是 Github 有需要的小伙伴可以看一下~
√ Python √ 思路历程 √ 踩坑经过 √ 经验总结 × 企图涨 star
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为字符集大小
实用建议:
- 每道题至少手写两遍:一遍看答案理解,一遍自己实现
- 用Python内置数据结构(deque、heapq、defaultdict)能简化很多代码
- 遇到难题时,先想暴力解,再找优化点
- 定期复盘错题,特别是边界条件处理
一句话总结: 按类型刷题,理解套路比题海战术更重要。
mark

