Fork me on GitHub

随笔分类 -  【101】算法

摘要:关于公共祖先的问题分类: 这类问题有多种解法和类型,根据题目给出的信息去判断使用哪一种 1、给你树,只支持从父亲找儿子,不支持儿子找父亲,最后要求最近公共祖先,使用dfs或者分治 2、支持儿子找父亲,求最近公共祖先,逆序,从儿子找到底,然后比较(具体看本题代码,说不清) 3、不给树,求是否有共同祖先 阅读全文
posted @ 2017-03-16 22:16 LinkinStar 阅读(299) 评论(0) 推荐(0) 编辑
摘要:二叉树 二叉树的dfs和bfs,bfs的三种情况 二叉树的三种遍历 二叉树非递归的遍历 二叉平衡树 分治和递归的区别 二叉查找树的定义,特性 二叉查找树的判断,新增,删除 归并排序,快速排序的区别 阅读全文
posted @ 2017-03-08 11:15 LinkinStar 编辑
摘要:二分查找,旋转排序数组,找中位数,三步反转 主要是二分的思想的强化和二分模版的练习。 看到search和sorted这样的关键词优先想到二分 二分的复杂度为O(logN)属于比较快的 基本上O(N)下面就是他了 很少有O(1)的解法 看到字符串的逆序等可以考虑三步反转 456 123-》654 32 阅读全文
posted @ 2017-03-02 19:04 LinkinStar 编辑
摘要:dfs、递归、迭代、搜索 这次我这次训练主要得到的。 这里记录一下,主要训练的题目有Restore IP Addresses Palindrome Partitioning Letter Combinations of a Phone Number Combination Sum Permutati 阅读全文
posted @ 2017-02-28 22:40 LinkinStar 编辑
摘要:之前一直说有道题目要用到二叉树的定义以及遍历,所以一直都没写,这次先来说说二叉树的遍历。 对于二叉树的定义,以及二叉树的一些性质,在这里我就不多说了。 这次主要是说说怎么样去遍历一颗二叉树。 这里一共给出4种遍历的方式,然后给出思路,具体代码就不编写了,因为对于二叉树来说,不同的方式存放,代码差距还 阅读全文
posted @ 2016-07-16 23:00 LinkinStar 阅读(1265) 评论(0) 推荐(0) 编辑
摘要:我们在一般的四则运算都是中缀表达式。 别问我什么是中缀表达式。 我就知道符号两边是数字。也就是符号在中间。 1+3 什么是后缀表达式呢? 13+ 符号在后面。 那么就有人奇怪了,为什么我要使用后缀表达式呢? 问题就是运算的时候,在编程实现的时候,后缀表达式比中缀表达式好用呗。 没事,不理解那里好用没 阅读全文
posted @ 2016-07-09 21:59 LinkinStar 阅读(503) 评论(0) 推荐(0) 编辑
摘要:很多时候,我们很容易看到时间复杂度为NlogN的算法。 我觉得很多人其实和我一样,可能知道快排的时间复杂度是NlogN。 但是怎么出来的呢?如何计算这种分治或者递归处理的算法的复杂度呢? 简单举个例子,很通用 我们设置解决这个问题需要的时间复杂度为T(N) 处理其中一半的问题时间复杂度为T(N/2) 阅读全文
posted @ 2016-07-07 10:08 LinkinStar 阅读(1697) 评论(0) 推荐(0) 编辑
摘要:发现这货之后,顿时觉得之前的程序极其傻了。 因为这个算法只是简单的利用了多项式的结合律。 就把原来的需要多次相乘的算法改变成了每次只需乘一个的算法。 下面给出题目 原来比较傻的解法 比较靠谱的解法 先利用结合律,把每一项的X给提取出来。 那肯定有人会问了,万一其中有一项不存在呢? 不存在的那一项,其 阅读全文
posted @ 2016-07-07 09:42 LinkinStar 阅读(371) 评论(0) 推荐(0) 编辑
摘要:TSP问题一直是个头疼的问题,但是解决的方法数不胜数,很多的算法也都能解决。百度资料一大堆,但是我找到了代码比较简练的一种。随机法。下面只是个人的看法而已,如果有任何问题虚心接受。 顾名思义,随机法就是随机一个序列然后用这个序列去解决问题。 TSP问题描述中,一个人走一圈回到原点要使走过的路程最短, 阅读全文
posted @ 2016-04-19 00:56 LinkinStar 阅读(1805) 评论(0) 推荐(0) 编辑
摘要:首先是题目的意思: 从一个正方形的0,0点开始走,只能横着走,竖着走,最多走k步,下一个点的数一定要比当前这个点的值大,每走一步,就加上下一个点的数据,问数据最大能有多少。 首先遇到这种题目,走来走去的,一开始想到的是搜索,但是搜索我们搜的很多是路径,能走到那个点的最短路,但是这道题目不一样。 首先 阅读全文
posted @ 2016-04-12 00:11 LinkinStar 阅读(991) 评论(0) 推荐(0) 编辑
摘要:首先还是对题目的意思进行说明,给出一个矩阵的数,然后求出一个子矩阵这个子矩阵包含的数的和是最大的。 首先对于题目进行转化,利用一个数组add进行存放临时数据,第一行存放原来数据的第一行,第二行存放原来数据的一二行的和,第三行存放原来数据的一二三行的和。 利用这个数组可以把任何连续几行的数据变成一行的 阅读全文
posted @ 2016-04-11 14:46 LinkinStar 阅读(581) 评论(2) 推荐(0) 编辑
摘要:首先这道题目先要理解题目的意思。 用一些方块堆塔,给出的每种方块个数是无限的,只有满足长宽都小于下面一个方块的方块才能摆上去。 首先这道题需要一个转化。 每个方块有3个不同的面,每个面长宽交换,一共每个方块最多有6种情况。 X Y Z 1 2 3 2 1 3 3 1 2 1 3 2 2 3 1 3 阅读全文
posted @ 2016-04-10 01:00 LinkinStar 阅读(251) 评论(0) 推荐(0) 编辑
摘要:先上代码,然后说明。 首先对于动态规划到现在的理解,只是现阶段的理解。动态规划下面用dp代替。 要点: 1、一个问题可以被分成多个相同的子问题,子问题和原问题差别只有数据规模,总结就是大化小。 2、这个问题的解可以由子问题的解得出,总结就是用已经有的小解得出最后的解。 3、经常用一个二维数组去保存已 阅读全文
posted @ 2016-04-08 23:42 LinkinStar 阅读(766) 评论(0) 推荐(0) 编辑
摘要:简单的对于bfs的运用,但是还是写的太慢了写了TMD的1H,主要是不熟悉,以后慢慢熟悉就好了,模型基本已经能建立了,主要出现bug是在方向数组的运用上面,一定要记得是从0开始的,而不是从1开始的,导致错误。 阅读全文
posted @ 2016-03-30 01:24 LinkinStar 阅读(397) 评论(0) 推荐(0) 编辑
摘要:首先解释什么是最小生成树,最小生成树是指在一张图中找出一棵树,任意两点的距离已经是最短的了。 算法要点: 1、用book数组存放访问过的节点。 2、用dis数组保存对应下标的点到树的最近距离,这里要注意,是对树最近的距离,而不是源点,这和单源最短路径是有区别的。 3、用maps数组保存边的关系。 4 阅读全文
posted @ 2016-03-29 00:32 LinkinStar 阅读(1707) 评论(0) 推荐(0) 编辑
摘要:并查集算法多用于复杂关系的计算,比如亲戚的计算(计算总共有多少组亲戚关系,亲戚的亲戚也是亲戚),一个公司有多少组(老大的老大也是老大)。 算法要点: 1、用树(森林)存放关系,有关系的人一定有一个相同的根节点。 2、用数组存放节点关系,如tree【2】 = 3,表示2号人的根节点是3(2的老大是3) 阅读全文
posted @ 2016-03-27 00:24 LinkinStar 阅读(222) 评论(0) 推荐(0) 编辑
摘要:这个算法也是求单源最短路径用的,但是这个算法可以解决Dijkstra不能解决的负权边问题。 算法要点: 1、用dis存放源点到任意一点的距离。 2、用三个数组存放输入的点到点以及点到点的距离,x【i】,y【i】,x_y_dis【i】其中表示x【i】到y【i】的距离为x_y_dis【i】。 3、循环边 阅读全文
posted @ 2016-03-25 23:59 LinkinStar 阅读(277) 评论(0) 推荐(0) 编辑
摘要:这个算法适用于求单源最短路径,从一点出发,到其余个点的最短路径。 算法要点: 1、用二维数组存放点到点的距离 不能相互到达的点用MAX代替距离 2、用dis数组存放源点到任意其他一点的距离 dis【5】表示源点到5点的距离为dis【5】中的值 3、用book数组记录已经确定最小dis的点 4、用in 阅读全文
posted @ 2016-03-24 00:46 LinkinStar 阅读(227) 评论(0) 推荐(0) 编辑
摘要:由于最短路径算法我认为比较重要,所以分成几个专题来慢慢细化去磨它,不能一口气吃个胖子嘛。 首先在说算法之前,先说清楚什么叫做最短路径。 题目一般会给你一张图,然后告诉你很多地方,然后告诉你各个地方之间的路程有多远,要你求出,两点间的最短距离,注意,题目给出的两点间的距离未必是最短的,可能通过第三个点 阅读全文
posted @ 2016-03-17 22:49 LinkinStar 阅读(330) 评论(0) 推荐(0) 编辑
摘要:首先是大方向上面的对比: 两者都能用于图的遍历搜索,很多时候两者都能得到最终的结果。多说时候要最快的得到第一个解,可能dfs要快一些。 代码上面的对比: dfs利用递归实现,bfs多用循环实现,差别不大 但是在于一点就是,dfs用完这个点之后要还回去,而bfs不用,因为它是慢慢扩散的。 最后也是最重 阅读全文
posted @ 2016-03-17 00:40 LinkinStar 阅读(376) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示