
算法设计与分析
文章平均质量分 85
AXIMI
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【算法设计与分析】图:Djikstra算法
文章目录算法介绍算法过程Java实现例题算法介绍Djikstra算法是单源最短路径算法:用于计算有向图中某个节点到其他节点的最短路径,当然无向图也可以。该算法要求图中不存在负权边。算法过程求A到其他节点的最短路径:维护三个东西,从A到其他节点的路径长度队列Queue,数组visited用于记录已保存最短路径的节点,数组res用于记录节点A到其他节点的最短路径。开始时,Queue中只有A节点自己,三组数据如下:Queue:[(A, 0)] 起始节点为A,A到A的距离为0visited原创 2020-06-10 22:04:59 · 1263 阅读 · 0 评论 -
【算法分析与设计】图:bellman-ford算法
介绍Bellman-Ford 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法。该算法由 Richard Bellman 和 Lester Ford 分别发表于 1958 年和 1956 年,而实际上 Edward F. Moore 也在 1957 年发布了相同的算法,因此,此算法也常被称为 Bellman-Ford-Moore 算法。Bellman-Ford 算法和 Dijkstra 算法同为解决单源最短路径的算法。对于带权有向图 G原创 2020-06-09 21:21:06 · 816 阅读 · 0 评论 -
【算法设计与分析】图:联合集/联合查询(Union Set/Union Find)
问题说明主要围绕leetcode上的这个题介绍。联合集的概念及联合查询联合集假设初始时,所有的元素都在不同的set内,连接两个元素后,这两个元素就属于同一个set。leetcode684的题就是可以用联合集来做:刚开始假设所有的节点都在不同的set内,连接两个节点之后就设置这两个节点在同一个set。当新加入的某一条边的两个节点都在同一个set,就说明这两个节点已经可以通过一定的路径连接了,所以新加入的边就是冗余边。演示假设现在有6个节点1-6,我们向这些节点加入边。初始化时节点及对应的集合如下:原创 2020-06-04 13:21:17 · 421 阅读 · 0 评论 -
【算法设计与分析】字符串的基本概念
更高效地遍历字符串中的字符你是怎么遍历一个字符串例如"agergehhqre"中的所有字符的呢?是下面这种方式吗?for(int i=0;i<s.length;i++) System.out.println(s.charAt(i));那以后不要用这种方式遍历了,用下面这种方式遍历吧:for(char c : s.toCharArray()) System.out.println...原创 2019-06-24 21:33:40 · 256 阅读 · 0 评论 -
【算法设计与分析】leetcode中几道buy and sell的题目总结
这篇笔记主要记录leetcode几道buy and sell的题目解析的过程。包括:121(Easy) Best Time to Buy and Sell Stock1.(Easy) Best Time to Buy and Sell StockDescription:Say you have an array for which the ith element is the p...原创 2019-06-25 19:54:19 · 436 阅读 · 0 评论 -
【leetcode】几种二分法的标准书写格式
记这篇笔记的原因是我对二分法书写缺少一种标准和思维模式。二分法理解起来虽然简单,但是在书写的时候有很多细节需要注意,比如二分的起始终止条件是什么(while(i!=j) while(i<j) while(i<=j))?二分范围的缩进要如何实现(是头尾同时缩进还是只缩进一端)?这些细节上的问题要慢慢处理的话很麻烦,我希望积累一些标准的二分法的书写格式,这样在限定时间内完成题目的时...原创 2019-05-28 21:03:10 · 1005 阅读 · 0 评论 -
【算法设计与分析】链表翻转(时间复杂度O(n),空间复杂度O(1)的做法)
问题:现有链表为:1–>2–>3–>4–>5–>null如何在O(n)的时间复杂度,O(1)的空间复杂度内实现这个链表的翻转?即将链表翻转为5–>4–>3–>2–>1–>null方法:链表翻转的general做法是,借助一个假链表头(用dummy表示),使用三个指针来完成。以翻转1-->2-->3-->4--...原创 2019-05-17 21:56:20 · 3557 阅读 · 0 评论 -
【算法设计与分析】Majority Voting Algorithm-多数投票算法
问题:有一个数组,里面是一些重复的数字。问是否存在一个数,这个数出现的次数超过了数组大小的一半?如果存在的话,这个数是多少?例如对于数组[1,1,3,1,3,1,2],数字1的出现的次数超过了数组的一半;而对于数组[6,6,6,7,7,7],没有数字超过数组的一半(数字6和7都出现了3次,出现的次数等于数组的一半,而没有超过数组的一半)如果题目要求的是数字出现的次数大于等于数组的一半,...原创 2019-05-16 22:01:48 · 4387 阅读 · 0 评论 -
【算法设计与分析】两个树节点的LCA(Lowest Common Ancestor)
递归代码(JAVA描述)参考自:https://www.youtube.com/watch?v=py3R23aAPCA现在令root是树的根节点,p和q是两个树中的节点,可以得到求这两个树节点LCA的递归代码为:public TreeNode LCA(TreeNode root, TreeNode p, TreeNode q) { if(root==null||root==p||root=...原创 2019-05-20 21:44:01 · 322 阅读 · 0 评论 -
【算法设计与分析】树
树的遍历:先序遍历:自己–左子树–右子树中序遍历:左子树–自己–右子树后序遍历:左子树–右子树–自己morris遍历:中序遍历: public indorMorris(TreeNode root) { List<Integer> nums=new ArrayList<Integer>(); TreeNode cur=roo...原创 2019-04-05 13:45:34 · 390 阅读 · 0 评论 -
【算法设计与分析】堆排序
堆的概念堆(Heap)可以定义为一颗二叉树,且这个树满足两个条件:是颗完全二叉树(essentially complete): 只有树的最后一层的最右边可以有缺位满足堆特性(heap property)—父母优势(parental dominance): 每一个节点的键都大于等于它子女的键堆中,键值从上到下排序键值之间不存在从左到右的次序(同一节点的左右子树之间没有任何关系)...原创 2019-03-30 14:04:03 · 935 阅读 · 0 评论 -
【算法设计与分析】排序
排序冒泡插入选择快排归并排序堆排序计数排序桶排序排序的分类按是否占用额外内存: 占用额外内存 归并排序、计数排序、基数排序、桶排序 不占用额外内存 冒泡排序、插入排序、选择排序、快排、堆排序 按是否为稳定排序分类: 稳定排序 归并排序、计数排序、基数排序、桶排序 不稳定排序 冒泡排序、插入排序、选择排序、快...原创 2019-03-29 14:55:44 · 673 阅读 · 0 评论