摘要: #include #include using namespace std;int search(char *text){ int lastpos[256], lmax=0, curmax=0; for(int i=0;i curmax){ curmax++; lmax = max(lmax, curmax); } else curmax = i-lastpos[ text[i] ]; lastpos[ text[i] ] = i; } return ... 阅读全文
posted @ 2013-09-21 20:44 l851654152 阅读(200) 评论(0) 推荐(0) 编辑
摘要: void change(int *p,int a,int b){ int tmp = *(p + a); *(p + a) = *(p + b); *(p + b) = tmp;}int main(){ int a[100]; for (int i = 0 ;i = 90;--i) { change(a,i,rand()%i); cout << a[i] <<endl; } return 0; } 阅读全文
posted @ 2013-09-21 17:25 l851654152 阅读(345) 评论(0) 推荐(0) 编辑
摘要: 这个需求应该是很常见的吧,需要从 0 到 n 之间选 k 个不重复的数组成一个序列。我最早遇到这个问题是在给校ACM比赛出题时,需要随机产生一些测试数据,当时我想的是用一个辅助数组记录之前已经产生的随机数,如果当前产生的随机数已经出现过就再重新随机。显然这样的实现效率是很低的,设想从10000个数中随机产生10000个数的序列,当前面9999个数已经确定了时,最后一个数被随机到的概率是 0.0001,也就是说大概需要调用随机函数10000次才会产生。类似的,第9999个数被随机到的概率是0.0002…….....我后来采用了一个改进的办法是,如果当前产生的随机数a已经在之前产生过了,就顺序去找 阅读全文
posted @ 2013-09-21 16:21 l851654152 阅读(1591) 评论(0) 推荐(0) 编辑
摘要: 1. TCP的三次握手最主要是防止已过期的连接再次传到被连接的主机。如果采用两次的话,会出现下面这种情况。比如是A机要连到B机,结果发送的连接信息由于某种原因没有到达B机;于是,A机又发了一次,结果这次B收到了,于是就发信息回来,两机就连接。传完东西后,断开。结果这时候,原先没有到达的连接信息突然又传到了B机,于是B机发信息给A,然后B机就以为和A连上了,这个时候B机就在等待A传东西过去。2. 三次握手改成仅需要两次握手,死锁是可能发生考虑计算机A和B之间的通信,假定B给A发送一个连接请求分组,A收到了这个分组,并发送了确认应答分组。按照两次握手的协定,A认为连接已经成功地建立了,可以开始发送 阅读全文
posted @ 2013-09-21 09:43 l851654152 阅读(375) 评论(0) 推荐(0) 编辑
摘要: 遍历二叉树的无论按照哪一种次序进行遍历,对n个结点时间复杂度为O(n),所需要的辅助空间为树的深度O(d). 阅读全文
posted @ 2013-09-21 00:23 l851654152 阅读(5891) 评论(0) 推荐(0) 编辑