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