Chirpy

算法(四)--双指针 && 滑动窗口 && 数组

双指针 当需要多次重复的遍历数组时,使用指向头尾的双指针并同时移动它们可以大大减少重复遍历的次数。 双指针的作用就在于可以跳过无用解。通过使用两个指针(通常一个指向数组的开始,另一个指向数组的末尾)并根据一定的条件同时移动这两个指针,可以有效地在遍历数组时减少不必要的重复遍历,从而提高算法的效率。此外,双指针技术还可以帮助跳过那些不满足特定条件的无用解,进一步优化搜索或计算过程。 两数之...

算法(二)--二叉树

二叉树 二叉树基础及其常见类型 二叉树的重要性将贯穿开发始终。很多实用且复杂的数据结构式基于二叉树的,比如红黑树(二叉搜索树)、多叉树、二叉堆、图、字典、并查集,二叉树是非常重要的基础。如果你想掌握上面的数据类型,掌握二叉树的重要性不言而喻。 同时很多算法思想可以被抽象为二叉树。常见的是回溯算法、动态规划,其过程可以视为二叉树的深度遍历。 满二叉树 中间节点都有左右子节点。深度...

算法(三)--链表

链表 tip:链表旋转操作如果是自己的size整数倍,等于没有操作。所以需要先把旋转次数对size取余。 time %= size LRU缓存机制 Leetcode 146 使用双向列表和哈希表: 双链表存储一个节点被使用(get或者put)的时间戳,且按最近使用时间从左到右排好序,最先被使用的节点放在双链表的第一位,因此双链表的最后一位就是最久未被使用的节点; 哈希表存储ke...

算法(一)--回溯

前言 本心得会将常见的算法解题思路按模块进行拆分讲解。模块分别是:双指针、链表、二叉树、回溯、二分查找、栈堆、贪心、动态规划、图论。斯认为新接触到一道算法题时,可以尝试将其识别为某模块的题目,应用相应模块的通用解法进行解题。但具体问题具体分析,通用解法只是提供一个启发,需要我们在不断的刷题中磨砺手感和技巧。 回溯算法 回溯算法本质上是暴力穷举算法,和我们常见的深度搜索算法DFS算法非常...