常见算法思想
常用到的算法思想
口木西成
沙坡村男子技术学院,java后台开发
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
并查集
概述 并查集是用来解决集合的合并和查找的数据结构。提供两个基本操作即 find(int i):查找I所归属的集合,通常使用find(i)和find(j)判断i和j是否连通,即是否属于同一个集合。 union(int i , int j):合并两个集合,操作后I所在集合和所有元素和J所在集合的所有元素都连通。 每个方法的对应思路: 初始化:用森林表示图的连通性,每个节点都有一个指针指向父节点。一开始各个节点都是单独的,所以指向自己。 合并:让节点较少的树连接到较多的树下面,避免出现链式情况。连通分量–。原创 2020-05-12 21:25:52 · 289 阅读 · 0 评论 -
双指针问题?so easy!
总纲 双指针指在遍历过程中使用两个指针进行扫描达到目的。大致分为快慢指针(相同方向)和左右指针(相向方向)。 值得一提的是,左右指针是很多算法的基础和搭配,如 归并排序、滑动窗口、字符匹配、单调栈等。 快慢指针 快慢指针一般解决链表问题。 指针初始化指向 head,前进时 fast 在前,slow 在后,具体的步幅根据题目决定。 题目举例 题号 题目 难度 141 环形链表 简单 ...原创 2020-04-04 23:22:47 · 291 阅读 · 0 评论 -
学算法,先从二分查找开始吧
总纲 思路很简单,细节是魔鬼。分为三个常用场景:寻找一个数,寻找左侧边界,寻找右侧边界。最后给出力扣上的题目例子。 基础框架 int binarySearch(int[] nums, int target) { int left = 0, right = ...; while(...) { int mid = (right + left) / 2; ...原创 2020-04-02 13:46:32 · 203 阅读 · 1 评论 -
回溯算法问题
基本解法 回溯问题,其实就是一个决策树遍历。 要考虑三个问题。 路径:已做出的选择。 选择列表:当前能做的选择。 结束条件:到达决策树的叶子节点,不能选择时。 其实回溯问题可以理解为动规的暴力解法,而且是没有重叠子问题的动规。 result = [] public void backtrack(路径, 选择列表): if 满足结束条件 result.add(路径); ...原创 2020-03-09 13:42:12 · 641 阅读 · 0 评论 -
滑动窗口问题
基本解法 设置左右指针,初始化都为0,把[left,right]当成一个窗口; 不断增大right,直到窗口内的子串符合要求; 不断增大left,缩小窗口直到窗口内子串不符合要求,在缩小left时记录结果; 直到right到达字符串串尾。 对于如何判断是否符合要求,建立两个哈希表,一个needs记录pattern子串中字符出现次数,一个windows记录当前窗口子串中字符出现次数。用一个mat...原创 2020-03-07 15:13:34 · 222 阅读 · 0 评论
分享