分类 算法专题 中的文章

算法专题|并查集

并查集(Union-find Data Structure)是一种树型的数据结构。它的特点是由子结点找到父亲结点,用于处理一些不交集(Disjoint Sets)的合并及查……

阅读全文

算法专题|前缀和

前缀和可以简单理解为「数列的前 n 项的和」,是一种重要的预处理方式,能大大降低查询的时间复杂度。 初级练习 左右元素和的差值 思路 思路简单,使用前缀和,不过需要左右两边……

阅读全文

算法专题|图

图相关的算法练习,需要掌握图的基本数据结构,图的连通性,图的遍历,最短路径,最小生成树等问题。 初级练习 找到小镇的法官 思路 思路很简单,基于图的度,由于法官不信任其……

阅读全文

算法专题|贪心

贪心算法没有固定的模板,基本思路是找到问题的一个切入点,虽然证明这个解法是最优的。 初级练习 拆分数位后四位数字的最小和 思路 这题很简单,数据只有4个数,组合就3种,……

阅读全文

算法专题|单调栈

初级练习 下一个更大元素 I 思路 最基础的单调栈用法。 代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 func nextGreaterElement(nums1, nums2 []int) []int { mp := map[int]int{} stack := []int{} for i := len(nums2) - 1; i >= 0; i-- { num := nums2[i] for len(stack) > 0 && num >=……

阅读全文

算法专题|滑动窗口

滑动窗口,这个算法思路非常简单,就是维护一个窗口,不断滑动,然后更新答案。 初级练习 学生分数的最小差值 思路 因为可以任意选k名学生,因此我们排序后,使用滑动窗口,维……

阅读全文

算法专题|双指针

双指针是一种简单而又灵活的技巧和思想,单独使用可以轻松解决一些特定问题,和其他算法结合也能发挥多样的用处。 双指针顾名思义,就是同时使用两个指针,在序列、链表结构……

阅读全文

算法专题|二分查找

二分查找 (Binary Search) 也称折半查找,它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。 总结有以下特征和解题步骤: 寻找……

阅读全文

算法专题|回溯

回溯 (backtracking) 是暴力搜索的方法之一。 总结有以下特征和解题步骤: 问题的解在可预估的范围内 给出一个解能快速判断是否符合要求 代码有固定模板 1 2 3 4 5 6 7 8 9 10 result = [] def back……

阅读全文

算法专题|动态规划

动态规划(Dynamic Programming,DP)是运筹学的一个分支,是求解决策过程。总结有以下特征和解题步骤: 肯定是求最值问题,并且具备重叠子问题 定义问题……

阅读全文