💡
原文英文,约14900词,阅读约需55分钟。
📝
内容提要
本文探讨了将LeetCode问题解决过程与冥想结合的方法,强调以有条理和放松的方式学习数据结构和算法。基于Blind 75列表,介绍了动态数组、哈希表和前缀和等概念,鼓励读者耐心理解原理,而非仅仅解决问题。
🎯
关键要点
- 将LeetCode问题解决过程与冥想结合,强调有条理和放松的学习方式。
- 基于Blind 75列表,介绍动态数组、哈希表和前缀和等概念。
- 鼓励读者耐心理解数据结构和算法的原理,而不仅仅是解决问题。
- 学习前需要对TypeScript/JavaScript和Python有一定了解,基本的Big O表示法知识也有帮助。
- 动态数组是灵活的,可以在执行过程中改变大小,时间复杂度为O(1)访问元素,O(n)插入或删除元素。
- 哈希表通过键值对实现关联数组,平均情况下查找、插入和删除操作的时间复杂度为O(1)。
- 前缀和是对一个序列的运行总和的序列,时间复杂度为O(n)。
- 双指针技术用于遍历数组,简单易用,适用于检查回文和求平方数组等问题。
- 滑动窗口技术用于处理子集操作,分为固定窗口大小和动态窗口大小。
- 栈是一种后进先出(LIFO)的数据结构,常用于有效地处理括号匹配等问题。
- 二分查找是一种高效的查找算法,时间复杂度为O(log n)。
- 链表是一种动态数据结构,分为单链表、双链表和循环链表,操作时间复杂度为O(n)。
- 树是一种非线性数据结构,二叉树和二叉搜索树是常见的树结构,插入和删除操作的时间复杂度为O(h)。
- 堆是一种特殊的完全二叉树,常用于实现优先队列,堆排序的时间复杂度为O(n log n)。
- 回溯是一种解决问题的策略,适用于生成子集等问题,理解起来较为复杂。
➡️