![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法与数据结构
文章平均质量分 56
攀登程序猿
这个作者很懒,什么都没留下…
展开
-
JAVA进步一点点--leetcode设计题型-Map
学习思路在leetcode中,设计题型并没有给出一个像数组、字符串等完全一致的一个讲解学习步骤,但是设计题型自我感觉是 数据结构+算法的一种结合,因此,仍然打算按照数据结构的类型来刷题学习。Map字典类的设计题Map接口:双列数据,存储key-value对的数据,通过IDEA查看基本类的继承关系,可以看到我们常用Map的类关系如下,选择数据结构,还是需要了解数据结构的特点,我将从键值特点、是否排序、使用范围、线程安全、执行效率几个方面对几个类进行选择。...原创 2021-03-25 22:27:43 · 157 阅读 · 0 评论 -
JAVA进步一点点--数据结构与算法(贪心)
贪心贪心原理贪心原理的第3点和第4点事难以直接描述的,我们以最常见的问题来说明活动规划问题【leetcode】253. 会议室 IIhttps://leetcode-cn.com/problems/meeting-rooms-ii/本人非会员,只能找其他人截的图了,(1)确定最优子结构假定ak已经是ai到aj活动中最大相互相容的多活动中的一个,那么Aij(从ai活动到aj活动)可以拆解为下图红框中的部分,此处的最优解就证明和dijkstra的证明十分相似,全路径的最短必然是中间路径的最原创 2021-03-18 23:31:34 · 107 阅读 · 0 评论 -
JAVA进步一点点--数据结构与算法(深搜、回溯)-全排列、回溯树
全排列全排列是深搜/回溯的一个大类,全排列原创 2021-03-18 00:43:47 · 95 阅读 · 0 评论 -
JAVA进步一点点--数据结构与算法(广搜)--单源最短路径Dijkstra
Dijkstra解决有向图单源最短路径问题,要求所有边的权重非负值。从已经加入到的集合中找到到另一个集合的最短路径,加入进来。练习题https://leetcode-cn.com/problems/cheapest-flights-within-k-stops/很明显的有向带权图,但是增加了k站中转这个限制条件,参考大神的代码,限制k的条件十分巧妙 public int findCheapestPrice(int n, int[][] flights, int src, int ds原创 2021-03-16 23:08:31 · 76 阅读 · 0 评论 -
JAVA进步一点点--数据结构与算法(广搜)--单源最短路径
问题定义可以解决的问题:可以使用的相关定理(1)最短路径的子路径也是最短路径(2)权重存在为负值的边只要不存在负权重的环,都可以找到最短路径,并且最短路径也不会有正的环路。(3)最短路径树类似于广度优先树,是以权重为最短的源节点到所有节点的最短(4)所谓的松弛操作就是假设最初的距离是无穷,如果发现某一条路径比现在的短,则更新一下。Bellman-Ford算法一般化的单源最短路径问题,可以解决边权值为负值的情况,但是复杂度大于Dijkstra。判断的环路是负权值环路,即还可以进行原创 2021-03-16 00:34:05 · 133 阅读 · 0 评论 -
JAVA进步一点点--数据结构与算法(深搜)--971. 翻转二叉树以匹配先序遍历
971. 翻转二叉树以匹配先序遍历题目看了半天没看懂,官网解答也看的迷迷糊糊,发现一个大神只有29行代码的解答,反而让我豁然开朗,特意记录一下题目过程。分析要求二叉树的先序遍历和voyage序列匹配,如果不匹配是允许旋转子树的,但这个旋转只是交换左子节点和右子节点的位置,不是真正的全部翻转,就如例子里的,2和3互换了位置,4和5没有互换位置,这里的互换相当于搜索顺序变一下。因此,题目可以这么分析:(1)二叉树的先序遍历,并记录到voyage的那个元素了,对值进行对比。(2)如果当前元素不相等原创 2021-03-13 19:52:19 · 94 阅读 · 0 评论 -
JAVA进步一点点--数据结构与算法(广搜)-- 最小生成树、dijkstra
最小生成树定义: 一个连通无向图G=(V,E)来表示,V是顶点的集合,E是边的集合。我们对于每条边(u,v)属于边的集合,w(u,v)是边的权重,我们希望找到一个无环子集,使得所有点连通,并且w(T)=∑w(u,v)最小。 可以认为各个城市有多种修路方法,距离各不一样,从这些修路方法中找到一个使得修路的总和最小。伪代码(框架)摘自《算法导论4》 寻找的安全边,其实就是分隔两个子集的轻量级边(最小边),不一定只有一条,因此不一定是只有一种最小生成树(贪心算法的体现->可以学习一下证明过程原创 2021-03-13 22:29:31 · 122 阅读 · 0 评论 -
JAVA进步一点点--数据结构与算法(广搜)--面试题 17.22. 单词转换
注:1->没有给定begin、end、wordlist的范围,需要判空和特殊用例判断begin为空,长度都为一个单词,可行,直接输出endworldList不包含endword不行2.没有给定范围,不知道超时时间3.题目没有给出无法转换的情况,但是示例给出无法转换时返回空特殊情况(1)一开始就没有新鲜橘子,返回0(2)有多棵树,即有的新鲜橘子不会被腐烂的橘子影响到,返回-1优化点:可以不用visited,直接改成2即可;public int orangesRotting(int[][.原创 2021-03-13 17:10:29 · 93 阅读 · 0 评论 -
JAVA进步一点点--数据结构与算法(广搜)--单词拆分
139. 单词拆分暴力法:https://leetcode-cn.com/problems/word-break/solution/zi-fu-chuan-sou-suo-wen-ti-bfshe-dfshui-shi-bi-jia/ 大神的题解抄袭一遍https://leetcode-cn.com/problems/word-break/solution/shou-hui-tu-jie-san-chong-fang-fa-dfs-bfs-dong-tai/ 大神画图讲解大神不要怪我偷个图,原创 2021-03-11 22:21:42 · 100 阅读 · 0 评论 -
JAVA进步一点点--数据结构与算法(分治算法、二分查找)
分治与二分分治算法通常以数学归纳法来验证。而它的计算成本则多数以解递归关系式来判定。240. 搜索二维矩阵 II暴力法直接搜索 //240. 搜索二维矩阵 II public boolean searchMatrix(int[][] matrix, int target) { return Arrays.stream(matrix).flatMapToInt(o1-> Arrays.stream(o1)).anyMatch(o1->o1==target); }分治法:根据原创 2021-03-07 11:29:58 · 107 阅读 · 0 评论 -
JAVA进步一点点--数据结构与算法(递归2)
669. 修剪二叉搜索树https://leetcode-cn.com/problems/trim-a-binary-search-tree/这个题和上一个二叉搜索树的题好相似呀,都可以使用递归处理,可能二叉搜索树的前序本身是一个升序的系列,正好对应了分治算法。 //递归方程 当root在区间内,则对左树,右树进行整改后,返回root, // 当root<low,则整改右树,并返回右树中的结果,当右树也为null,停止 // 当root>high原创 2021-03-06 09:40:17 · 60 阅读 · 0 评论 -
JAVA进步一点点--数据结构与算法(递归1)
面试题 04.06. 后继者https://www.bilibili.com/video/av458351722/原创 2021-03-06 07:53:31 · 175 阅读 · 1 评论 -
JAVA进步一点点--数据结构与算法(递归)
递归我们递归的求解一个问题,在每层递归中应用如下三个步骤:将问题划分为一些子问题,子问题的形式和原问题一样,只是规模更小递归的解决子问题,当子问题足够小(初始值)时,即停止递归将子问题的解合并成原问题的解斐波那契数列先来个简单题开个胃:https://leetcode-cn.com/problems/fei-bo-na-qi-shu-lie-lcof/按照上面的套路进行分析:将问题划分为一些子问题 f(n) = f(n-1) + f(n-2) ,n-2>=0 则初始值是f(0)原创 2021-03-05 00:25:05 · 72 阅读 · 1 评论