![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法学习
文章平均质量分 76
十三hhhhh
这个作者很懒,什么都没留下…
展开
-
算法学习之Rabin-Karp字符串匹配(java版)
算法学习之Rabin-Karp字符串匹配(java版)字符串匹配通常使用KMP算法,但该算法比较难记,而且应用范围不广。这里我们介绍一下Rabin-Karp算法,该算法的算法复杂度以KMP一样都是O(n+m),思路简单。概念给出一道字符串匹配的题目如下:在source字符串中找到target字符串,如果能找到就输出其下标,否则输出-1。输入:source:“abcdef” target:“cde”输出:2思路1 暴力求解法直接用暴力法求解,"abc"与"cde"比较,不一致,然后右原创 2020-07-20 09:31:27 · 386 阅读 · 2 评论 -
算法学习之BFS广度优先搜索(java版)
算法学习之BFS广度优先搜索(java版)广度优先搜索就如其名字一样,优先横向搜索,通常用于树和图中。概念图中给出了一棵二叉树,按照广度优先算法输出的结果是:1, 2, 3, 4, 5, 6可以将广度优先算法抽象成队列的入队与出队的过程。设队列为queue,并初始化为空queue=[1],首个节点入队(表示待搜索节点)queue=[2, 3],队列内头部节点出队(表示已经搜索了该节点),将该节点的左右子节点入队插入到尾部(表示其子节点待搜索)queue=[3, 4, 5],队列内头部原创 2020-07-15 21:18:17 · 660 阅读 · 0 评论 -
算法学习之排序算法(java版)
算法学习之排序算法(java版)文章目录算法学习之排序算法(java版)冒泡排序插入排序归并排序快速排序拓扑排序排序算法是高级算法的基础,因此我们有必要掌握并且熟练的写出各种排序算法的代码冒泡排序public void popSort(int[] nums){ int len = nums.length; for(int i =0;i<len;i++){ for(int j = i; j<len; j++){ if(nums[j]>nums[j+1]原创 2020-07-14 21:27:14 · 134 阅读 · 0 评论 -
算法学习之滑动窗口(java版)
算法学习之滑动窗口(java版)文章目录算法学习之滑动窗口(java版)框架例题最小覆盖子串字符串排列找所有字母异位的词最长无重复子串总结滑动窗口实际上是通过双指针实现的,[left,right]之间的范围就是窗口。通常用于解决字符串、数组相关的问题。比如最小子串等。框架public static String minWindow(String s, String t) { HashMap<Character, Integer> need = new HashMap<&原创 2020-07-13 21:56:20 · 7762 阅读 · 1 评论 -
算法学习之双指针(java版)
算法学习之双指针(java版)数组或字符串相关的问题经常需要运用双指针来求解。而双指针又分为快慢指针和左右指针。其中快慢指针主要用于解决链表问题,而左右指针用于解决数组问题。概念快慢指针顾名思义,快慢指针是指一个指针走的快,一个指针走得慢。左右指针左右指针是指双指针中一个指针在数组的最左侧,而另一个在最右侧。通过判断,可以分别让两侧的指针向中间移动,以求解问题。例题判断链表是否有环(快慢指针)思路:快指针每次走两步,慢指针每次走一步。如果链表中存在环,总有那么一个时刻快指针比慢指针多走原创 2020-07-10 21:29:44 · 5280 阅读 · 8 评论 -
算法学习之二分法查找(java版)
算法学习之二分法查找(java版)二分法可以帮助我们快速的查找到特定元素思路从有序数组的中间那一个元素「mid」开始,如果该元素就是我们要查找的特定元素,直接返回,算法结束。如果当前数组的长度为0,则无目标元素,算法结束。否则进入第二步。如果该元素小于我们要寻找的特定元素,那么我们从这个数组的右半边[mid+1,right]继续寻找。如果该元素大于我们要寻找的特定元素,那么我们从这个数组的左半边[left, mid-1]继续寻找。重复步骤1-2。二分法的框架// 左闭右闭int bi原创 2020-07-09 20:25:30 · 174 阅读 · 0 评论 -
算法学习之回溯问题(java版)
算法学习之回溯问题文章目录算法学习之回溯问题概念算法框架(伪代码)例题全排列问题N皇后问题个人总结解决一个回溯问题,实际上就是一个决策树的遍历过程概念在解决回溯问题时,我们需要关注:路径:已经做出的选择选择列表:当前情况下可以做出的选择结束条件:到达决策树底层,无法再做选择的条件算法框架(伪代码)result = []def backtrack(路径, 选择列表): if 满足结束条件: result.add(路径) return for 选择 in 选择列表:原创 2020-07-08 00:19:58 · 356 阅读 · 0 评论 -
算法学习之动态规划(java版)
算法学习之动态规划(java版)文章目录算法学习之动态规划(java版)概念重叠子问题最优子结构状态转义方程求解备忘录dpTable方法例题凑零钱问题备忘录方法求解dpTable方法求解总结动态规划算法可以有效的解决穷举问题。当一个穷举问题存在「重叠子问题」这个特点时,那么就可以尝试使用动态规划算法来解决。概念动态规划算法有三个要素:重叠子问题最优子结构状态转义方程重叠子问题以斐波那契数列问题为例,其递归方法如下:int fib(int N) { if (N == 1 || N原创 2020-07-06 23:47:43 · 241 阅读 · 0 评论