左程云老师算法
贝贝爱豆豆
这个作者很懒,什么都没留下…
展开
-
最长递增子序列问题,O(N*logN)实现
最长递增子序列的长度问题,O(N*logN)实现子序列:可以不连续的例如:2,1,3,4,7,5,6 上述序列的最长递增子序列是1,3,4,5,6或者2,3,4,5,6一般方法:number : 2 3 1 7 4 5index: 0 1 2 3 4 5len[]: 1 2 1 3 3 4第一个len[0]是1之后每一个number[i]查原创 2017-09-14 16:43:28 · 569 阅读 · 0 评论 -
换钱的方法数
[题目]给定数组arr,arr中所有的值都为正数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个整数aim代表要找的钱数,求换钱有多少种方法。[举例]arr=[5,10,25,1],aim=0;组成0元的方法有1种,就是所有面值的货币都不用。所以返回1.arr=[5,10,25,1],aim=15;组成15元的方法有6种,分别为3原创 2017-09-19 14:45:50 · 540 阅读 · 0 评论 -
给一个字符串,在后边最短添加什么,才能使得整体变成回文串
给一个字符串,在后边最短添加什么,才能使得整体变成回文串。(只能在后边添加)比如:abc12321添加为:cba整体构成:abc12321cba(即为回文子串)思路:找必须包含最后一个词的最长回文子串,剩余部分,直接反序添加。亮点:使用manacher算法,当某一个中心C第一次到达最后的时候,前边的地方逆序就行了。原创 2017-09-09 22:27:29 · 2242 阅读 · 0 评论 -
在一个字符串中,找出最长回文子串
在一个字符串中,找出最长回文子串(manacher算法)时间复杂度O(n)空间复杂度O(n)比如12321,先做预处理:#1#2#3#2#1#定义三个概念:回文半径:回文长度的一半回文右边界R:能扩到最右的边界,称之为回文右边界。取得回文右边界的时候,中心值Carr[]、C、RC、R是同步更新的。其中arr[i]存储i位置的回文右边界。原创 2017-09-09 22:21:44 · 1077 阅读 · 0 评论 -
如何判断一棵树是不是另一棵树的子树
给你两棵树,怎么判断一棵树是另一棵树的子树? 树1: 树2: 1 2 / \ / \ 2 3 4 5 / \ \ 4 5 7第一步:把二叉树序列化原创 2017-09-09 11:24:08 · 1097 阅读 · 1 评论 -
判断两个字符串能否互相转化
给定两个String,str1,str2,如果把str1里的字符经过变换,能变成str2。则说str1可以变成str2. 例如:"abcd"能变成"dcab" 开一个大小为256的字符数组思路: 第一:判断两个字符串长度是否相同。 第二:遍历第一个字符串的时候,相对应的数组里+1 第三:当遍历第二个字符串的时候,相对应的数组里-1, 如果发现有负数,原创 2017-09-08 14:35:11 · 1026 阅读 · 0 评论 -
40亿个整数,求上中位数
40亿个大整数,组成大文件。想找到其中,上中位数。内存,10MB,怎么办?内存,20K,怎么办?内存,有限的几个字符,怎么办?条件:按行读文件,这个动作假设不占用内存。40亿个整数,每个4字节,160亿字节,大约16G。第一、不要从个数下手,要从范围下手。如果是无符号整数:0至42亿,则表示1个整数的词频,是不会溢出的。10MB: 4原创 2017-09-15 15:29:11 · 1391 阅读 · 0 评论 -
俄罗斯信封问题
俄罗斯信封问题:一个信封有长和宽,规定,A信封如果长和宽都大于B信封,那么B信封可以放在A的里面。给你一个信封对象的数组,问,最多能套几层。O(N*logN)如果长宽都是不一样的,我们按照长排序,之后宽求最长递增子序列的长度。如果,信封的长宽可能相等,那么:在长的维度上,按照从小到大排序,在长相等的情况下,宽的维度上按照从大到小排序。依然按照原创 2017-09-14 19:46:26 · 556 阅读 · 0 评论 -
局部最小的值(O(logn))
局部最小:第一个数比第二个数小,第一个数就是局部最小;倒数第一个数比倒数第二个数小,倒数第一个数就是局部最小;第i个数比第i-1和第i+1个数小,则称第i个数为局部最小;问只找到一个局部最小就行,找到它。前提是任何两个相邻的数都不相等。O(logn)时间复杂度:0位置比1位置大,有向左的趋势n-1位置比n-2位置大,有向右的趋势在如上原创 2017-09-14 16:59:28 · 2225 阅读 · 0 评论 -
约瑟夫环问题(O(n)解法)
约瑟夫环问题(O(n)解法)假设n个人,报数为m的被淘汰,求最后剩下的人。暴力解法是O(m*n)的。转自:http://blog.csdn.net/lishuzhai/article/details/51125072题目:n个人围成一个圈,每个人分别标注为1、2、...、n,要求从1号从1开始报数,报到k的人出圈,接着下一个人又从1开始报数,转载 2017-10-11 20:29:58 · 2487 阅读 · 0 评论