不能只用O记号来谈论算法? 在刷LeetCode-1TwoSum的时候,有个人在论坛留言,大致意思如下: 我的算法击败了90%的人,O(nlgn)算法比O(n)算法快。 我觉得这个人是不懂算法的。让我一步一步解释。 # O的含义 通俗的说,O表示忽略系数的复杂度上限,常常用一个量级表示,比如n,nl ...
分类:
编程语言 时间:
2016-08-08 00:56:47
阅读次数:
181
有一组数据是在客人到达和出发时间,问:多少把椅子的能力,以满足所有客人的需求,可以有一个地方坐下要求。有些人甚至开始考虑暴力法,这些数据是少,其实这个问题很多数据, 暴力需求O(n*n)的时间效率,显然,将加班,因此,有必要O(n) 或O(nlgn)算法。属于一道想透了就很easy的,可是没想过就会...
分类:
其他好文 时间:
2015-06-26 13:21:40
阅读次数:
137
题目链接:点击进入
刚看到这题目还以为又碰到水题了,结果写了个最长O(n^2)的代码交上去超时了,才发现n有250*250那么大.后面在网上找到了一个nlgn求最长上升子序列的方法,才过了.这个nlgn算法的主要思想是将最长公共子序列转成最长上升子序列,然后用最长上升子序列nlgn的算法求解.更具体的解释可以参看这篇博文:最长公共子序列(nlogn) 代码如下:#include...
分类:
其他好文 时间:
2015-06-12 14:56:55
阅读次数:
102
题目:在一个n*n的棋盘上,格子标号1~n*n,现在有两个人从1跳到n*n(不走重复点),
现在要求去掉最少的中间点,使得路径是一样的。
分析:dp,LIS,LCS。问题是求最大公共子序列,数据较大需要O(nlgn)算法。
发现题目中的数据是不重复的,所以可以转化成最大上升子序列;
记录序列1中每个元素对应的顺序,将序...
分类:
其他好文 时间:
2015-05-13 23:13:48
阅读次数:
192
开始的时候一直想不到一个合适的状态转移方程;
后面想到可以分别求以中间那个数为终点和起点的最长上升子序列的长度,
然后以这个数为中心数的Wavio Sequence的长度就是其中短的那个值*2-1的值;
然后我们取所有数Wavio Sequence的最大长度作为答案。
这个题目卡了n^2的求最长上升子序列的算法,必须用nlgn算法才能过。
代码如下:
#include
...
分类:
其他好文 时间:
2015-01-27 09:29:57
阅读次数:
183