
算法
码农小麦
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
图与狄克斯特拉算法
使用广度优先搜索可以获得图中节点之间的最短路径,这里的最短术语只是用来描述节点之间的边数最小。当边具有某种意义时,需要考虑边的权重。 如边可以用来描述时间,距离,金额等,狄克斯特拉就是用来解决最"快"的路径,快只的就是权重最小,时间最短,金额最小等。 所以广度优先搜索用于在非加权图中查找最短路径,狄克斯特拉算法用于在加权图中查找最快路径。 狄克斯特拉包含的4个基本步骤: 1 找出当前最"快"的节点,从起点开始可以最"快"到达的节点 2 更新该节点的邻居节点的开销 3 重复上面的步骤,直到图中的节点均已被处理原创 2020-09-09 10:45:49 · 163 阅读 · 0 评论 -
图与广度优先搜索
图由节点和边组成,直接相连的节点成为邻居。广度优先搜索时一种用于图的查找算法,用来解决节点之间是否存在路径及最短路径问题。 看一个简单的问题,你想找一个懂炒股的人带你玩玩股票,你想从身边的人找找,你找了身边的几个好友(佩奇,苏西,艾德蒙,理查德),结果可能找到,也可能没找到。 如果没找到,你决定从朋友的朋友去找一下,看有没有结果,比如佩奇的朋友(瑞贝卡,丹尼),苏西的朋友(乔治,佩德罗)。 为了找到最短路径,假设你的好友是一度好友,朋友的朋友是二度朋友,你需要先依次筛选你的一度朋友,看是否有满足条件的。如果原创 2020-09-08 10:34:45 · 187 阅读 · 0 评论 -
使用两个栈模拟队列,使用队列模拟栈
队列:一种先进先出的数据结构,FIFO 栈:一种后进先出的数据结构,FILO 1 使用两个栈模拟队里 栈是先进后出,1,2,3,4压栈,出栈为4,3,2,1,而队列是先进先出的,所以可以使用两个栈来模拟队列。 一个栈A模拟队列的入队操作,另一个栈B模拟出队,出队时将栈A全部出栈然后压入栈B。这里需注意当栈B为空时,才能进行A到B的转移,否则数据顺序会不一致。 private Stack<Integer> stackA = new Stack<>(); private Stack<原创 2020-08-25 16:05:22 · 777 阅读 · 0 评论 -
暴力求解最大回文子串,优化暴力解,使用动态规划求解
求解最大回文子串是一道比较常见的算法题,回文就是正着读和反着读是一样的,例如:上海自来水来自海上。 1.暴力求解 截取每个可能的字符子串,并判断该字符串是否回文,先写一个判断回文的小函数: public static boolean isPalindromic(String s) { int len = s.length(); for (int i = 0; i < len / 2; i++) { if (s.charAt(i) != s.charAt(len - 1原创 2020-08-24 16:22:11 · 277 阅读 · 0 评论 -
19. 删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的。 进阶: 你能尝试使用一趟扫描实现吗? 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list 朴素的思路:倒数的话肯定原创 2020-08-02 12:20:59 · 221 阅读 · 0 评论 -
如何实现一个基于LRU时间复杂度为O(1)的缓存
LRU:Least Recently Used最近最少使用,当缓存容量不足时,先淘汰最近最少使用的数据。就像JVM垃圾回收一样,希望将存活的对象移动到内存的一端,然后清除其余空间。 缓存基本操作就是读、写、淘汰删除。 读操作时间复杂度为O(1)的那就是hash操作了,可以使用HashMap索引 key。 写操作时间复杂度为O(1),使用链表结构,在链表的一端插入节点,是可以完成O(1)操作,但是为了配合读,还要再次将节点放入HashMap中,put操作最优是O(1),最差是O(n)。 不少童鞋就有疑问了,写原创 2020-08-02 10:50:06 · 1005 阅读 · 5 评论