Skip to content

Wenzhi-Ding/coding_notes

Repository files navigation

Coding Notes

分享我的代码练习(主要是为了方便自己以后参考),以下只列举一些个人觉得比较好的题目,会不定期增删。

算法 Algorithm

  1. 深度优先搜索 Depth-First-Search
  2. 广度优先搜索 Breadth-First-Search
  3. 动态规划 Dynamic Programming
  4. 回溯法 Backtracking
  5. 线性规划 Linear Programming
  6. 二分查找 Binary Search
    • L1760 Minimum Limit of Balls in a Bag:二分查找的实际应用。查找的逻辑不一定是简单的数值比较。只要有目标函数、序列有单调性,都可以二分查找(其他相关:L0354)。
  7. 滑窗 Sliding Window
  8. 双指针 Two Pointers

数据结构 Data Structure

  1. 数组/矩阵 Array/Matrix

  2. 链表 ListNode

  3. 并查集 UnionFindSet

    • L1971 Find if Path Exists in Graph:并查集的基本思想是构建/压缩树,使得只需检查两个节点是否在一个树中,就可以判断两点是否连通。
  4. 图 Graph

  5. 堆 Heap

    • L0703 Kth Largest Element in a Stream:一道基础的堆队列题目。
    • L1675 Minimize Deviation in Array :1)体现了复杂问题的优化首先应从数学本质的角度思考;2)体现了堆队列处理最大最小值问题的时间效率性。
    • L1792 Maximum Average Pass Ratio:Python 内置的 heapq.heapify 可以直接用于多维数组,按数组的第一个元素排序。所以可以轻松维护 [sort_key, value1, value2...] 这样的结构,能够完成更复杂的任务。
      • L1801类似,在仅需要按顺序索引,不需要按键值索引时,可以直接维护一个堆,而不需要另外再维护一个字典。
  6. 栈 Stack

    • L1766 Tree of Coprimes:1)栈 + DFS 的样例,也涉及了树的存储问题;2)重要思路:根据数据量选择突破口。
    • L1776 Car Fleet II:一个单调栈的好例子,为以下问题提供了参考:1)什么时候可以用栈?2)怎么从问题中提炼出栈的维护规则?3)栈在 Python 中的正确使用姿势。(其他相关:L0496
    • L0224 Basic Calculator:用栈以更高的效率实现等价于递归的操作(而且写起来比递归简单)。
    • L1996 The Number of Weak Characters in the Game:列表套列表 + 单调栈 + 空间复杂度优化。
    • L0146 LRU Cache:LRU 缓存机制可以视为一种特殊的栈。
  7. 字典树 Trie

  8. 哈希表 HashMap

数学 Math

  1. 抽样 Sampling
    • M210216 Poker Probabilities:在做模拟的时候要关注概率分布及动态变化。扑克牌的玩法中多数为不放回抽样,如果直接用均匀分布或正态分布去模拟,就会算出错误的结果。
  2. 非线性规划 Non-linear Programming
  3. 离散规划 Discrete Optimization
    • M210323 Dellmar Supply Chain:将逻辑运算(非线性的)转为线性问题的范式,从而能够使用线性规划。
    • M210410 Discrete Optimization Assignment:非线性约束转换为线性约束,其实就是把边界画出来,用直线去拼出这个边界。通常需要涉及创建一些中间的线性变量。
      • 此外,只要不涉及决策变量,都可以先做一些预处理。恰当的预处理可以显著减小后面约束的复杂度。
  4. 因数 Divisor
  5. 等差数列
    • L0390 Elimination Game:数学的角度思考问题,并不一定是解析解,也可以是数学简化问题(抽象)+模拟的思路。
  6. 博弈问题
    • L0390 Cat and Mouse:动态规划解决博弈问题,清晰的逻辑思考是关键,准确全面的识别出边界状态和结束条件。
    • L2029 Stone Game IX:博弈问题往往可以通过归纳变成极其简单的问题。虽然实际情况是复杂的,但规则是简单的,所以往往可以将实际情况化简讨论。
  7. 贪心
  8. 概率

数据处理

其他参考

  • 拉不拉东算法与数据结构全教程(Link

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published