有一组数据是客人到来和离开的时间,问需要多少张桌椅才能满足所有客人都能有位置坐的要求。
暴力法就需要O(n*n)的时间效率了,显然是会超时的,故此需要O(n) 或者O(lgn)的算法。
属于一道想透了就非常容易的,但是没想过就会非常困难的题目。
解法是:
把所有客人到来和离开的时间都排成序列,每次客人到来需要n张桌椅,那么就+上n,每次客人离开就会返还n张桌椅,那么就-去n,求这样...
分类:
其他好文 时间:
2014-08-11 21:28:02
阅读次数:
296
使用KMP寻找最长的前缀的方法,比一般的暴力法有快了很多。
本题一般的暴力法需要的是O(m*n*n*n),其中m是有多少字符串,而n是字符串长度,而使用KMP就可以把时间效率提高到O(m*n*n),减少了一个n,提高了一个档次啦。
速度快很多。
准确来说应该是利用KMP寻找一个字符串A,在另一个字符串B任意位置出现的A的最长的前缀字符串。
理解好KMP的next table就好办了。每次查找到相等字符的时候,保存好最长的前缀。
注意本题的条件:选取最前的字典顺序输出。老害我错的条件。...
分类:
其他好文 时间:
2014-08-11 12:01:02
阅读次数:
250
AC自动机的灵活运用,本题关键是灵活二字。
因为数据不是很大,时间要求也不高的缘故,所以本题有人使用暴力法也过了,有人使用Trie也过了。
当然有人使用AC自动机没AC的,在讨论区里喊AC自动机超时的,那是因为不会灵活运用,或者是硬套模板的,AC了速度也不会快。
给出本人的算法思路:
1 把需要查找的关键字建立Trie, 然后构造AC自动机
2 查找的时候分八个方向查找,比如棋盘...
分类:
其他好文 时间:
2014-08-07 15:41:50
阅读次数:
314
本题要求求一组字符串的最长公共子串,其实是灵活运用KMP快速求最长前缀。
注意肯爹的题意:要求按照字典顺序输出。
还有要提醒的就是:有人也是用KMP来解这道题,但是很多人都把KMP当成暴力法来用了,没有真正处理好细节,发挥KMP的作用。而通常这些人都大喊什么暴力法可以解决本题,没错,的确暴力法是可以解决本题的,本题的数据不大,但是请不要把KMP挂上去,然后写成暴力法了,那样会误导多少后来人啊。...
分类:
其他好文 时间:
2014-08-06 23:12:42
阅读次数:
375
本题可以使用暴力法直接求解,思路也挺简单的,不过实现起来也挺麻烦的。
本题最暴力直接使用strstr过。 这里使用hash表的方法过,这种方法好像有个学名的,主要思路就是把一个需要查找的字符串赋予一个数值,那么就可以把一串字符串的比较转换为一个值的比较了,那么就可以加速字符串的查找了。
#include
#include
#include
const long long MOD = (...
分类:
其他好文 时间:
2014-08-03 15:23:05
阅读次数:
326
问题:一个由正数、负数、0组成的序列中,求一个连续子序列,使他们之和最大解一:暴力法,直接求出所有可能,找出最大值 1 MAX_SEQ_SUM( A, len ) 2 max = A[0] 3 max_b = max_e = 0 4 5 for i -> 0:len-1 6...
分类:
其他好文 时间:
2014-08-01 19:12:22
阅读次数:
208
看似简单的字符串处理,不过直接暴力法是会超时的。
故此需要优化,这里使用周期优化。
研究过数列序列的都知道,其实序列反复调用另外一个序列得到一个新的序列,都会出现周期的,问题是周期何时出现,如果利用这个周期。
这就需要分开每个数,使用一个新的数列记录每个数的周期,利用这个周期截去一大段数据,那么剩下的数据就很好处理了。
因为所有的周期数总和都不会超过n,数列的长度的,所以时...
分类:
其他好文 时间:
2014-07-29 15:04:58
阅读次数:
205
本题就是给出很多对字符串,然后问一个字符串在另外一个字符串出现的次数。
就是所谓的Strstr函数啦。
Leetcode有这道几乎一模一样的题目。
使用KMP算法加速,算法高手必会的算法了。
另外看见讨论说什么使用KMP还超时,最大可能是没有真正理解next table的含义,写了错误的代码,故此虽然自己运行结果正确,但是却没有真正发挥next table的作用,使得算法退化为暴力法了,所...
分类:
其他好文 时间:
2014-07-13 18:41:48
阅读次数:
229
题目:给你n个数让你在里面找到会不相同的4个数a,b,c,d,使得 d = a + b + c。
分析:数学题,散列表。这是一个优化问题。
方法1:暴力法;
先排序,然后直接利用四层循环求解,找到解后直接跳出,也可以以利用二分代替最后一层循环;
这种方法,如果遇到特殊的数据就会TLE;
方法2...
分类:
其他好文 时间:
2014-07-06 12:02:05
阅读次数:
141
本题就是给出一个数k和一个数组,包括N个元素,通过每次增加数组中的一个数的操作,最后需要得到1 - N的一个序列,不用排序。
可以从暴力法入手,然后优化。
这里利用hash表进行优化,最终得到时间效率是O(n*n)的算法,而且常数项应该很低,速度还挺快的。
思路:
1 如果数组A[i]在1 -N 范围内,就利用bool B[]记录,这个数已经找到了;
2 如果A[i]的值之前已经找到了,...
分类:
其他好文 时间:
2014-06-26 12:01:28
阅读次数:
349