- 博客(38)
- 收藏
- 关注
转载 求一个字符串中连续出现的次数最多的子串
求一个字符串中连续出现的次数最多的子串。例如字符串“abababc”,最多连续出现的为ab,连续出现三次。要和求一个字符串中的最长重复子串区分开来,还是上面的字符串,那么最长的重复子串为abab。两个题目的解法有些类似,都用到了后缀数组这个数据结构。求一个字符串中连续出现的次数最多的子串,首先生成后缀数组例如上面的字符串为:abababcbababcababcbabcabc
2015-03-18 12:59:24 679
转载 判断单链表里面有没有环
原作:点击打开链接题目:0.如何判断单链表里面是否有环?算法的思想是设定两个指针p, q,其中p每次向前移动一步,q每次向前移动两步。那么如果单链表存在环,则p和q相遇;否则q将首先遇到null。这里主要理解一个问题,就是为什么当单链表存在环时,p和q一定会相遇呢?假定单链表的长度为n,并且该单链表是环状的,那么第i次迭代时,p指向元素i mod n,q指向2i
2015-03-18 11:35:07 544
原创 题目1369:字符串的排列
就是一个字符串的全排列问题,字典序的话,先对字符串排序注意有重复的字符,所以如果全部输出全排列会有重复的#include#includechar str[11];int vis[11];void dfs(int count,char ss[]){ int len=strlen(str); if(count >= len) { ss[count] = '\0';
2015-03-11 17:23:40 388
原创 题目1503:二叉搜索树与双向链表
方法很简单,就是建树,然后因为是二叉搜索树,所以中序遍历就是排序好的了开始天真,想错了也是中序的思想,然后创建链表指针#include#include#includetypedef struct node{ int val; struct node *left; struct node *right; struct node *pre,*next;}Tree;
2015-03-11 16:29:43 320
原创 题目1524:复杂链表的复制
模拟这个链表就行了#include#include#includetypedef struct node{ int val; struct node *next; struct node *other; void setVal(int v) { this->val = v; next = other = NULL; }}List;void createLis
2015-03-10 22:33:50 474
原创 题目1368:二叉树中和为某一值的路径
记录树中的编号,递归寻找路径直到叶子节点就行了如果还没到叶子节点和就大于K就不用再递归了,减枝注意要字典序输出,如果right大于left就会导致递归得不到字典序,交换左右#include#include #includeusing namespace std;typedef struct node{ int val; int index; struct node *
2015-03-10 22:08:27 390
原创 题目1367:二叉搜索树的后序遍历序列
二叉搜索树:如果左子树不为空,那么左子树的数逗比根的数小,右子树的数比根的数大从前往后找,比根小的就是左子树(根是最后一个,后序遍历),其余就是右子树,然后递归!#include#includeint a[10004];bool check(int s,int e){ if(s >= e) return true; int p = s; while(p < e && a
2015-03-10 20:28:52 354
原创 题目1523:从上往下打印二叉树
明明PE,显示WA,郁闷。层次遍历,利用队列,把根入队列循环-》输出队首-》儿子入队列over#include#include#includeusing namespace std;typedef struct node{ int val; struct node *left; struct node *right; void setVal(int v) {
2015-03-10 19:32:23 383
原创 题目1366:栈的压入、弹出序列
就模拟栈的进出过程#include#include#includeusing namespace std;int a[100002];int main(){ int n; while(scanf("%d",&n) != EOF) { stackst1; for(int i=0;i<n;++i) { scanf("%d",&a[i]); }
2015-03-10 13:30:46 400
原创 题目1522:包含min函数的栈
创建2个栈,一个存放题目数字,另一个把当前最小值压入栈中。栈顶的就是最小值#include#include#includeusing namespace std;stackst1;stackst2;int main(){ int n; while(scanf("%d",&n) != EOF) { while(!st1.empty()) st1.pop();
2015-03-10 12:33:28 387
原创 题目1391:顺时针打印矩阵
WA了好久,注释部分不知道怎么错了,记录4条边的输出长度。后来改了,用i,j表示计算到的位置,把输出了的值赋值成-1,就能判断边界了,然后就循环就行了。#include#includeint m[1111][1111];int mm,n;int main(){ while(scanf("%d%d",&n,&mm) != EOF) { if(n <= 0 && m <=
2015-03-10 11:11:13 378
原创 题目1521:二叉树的镜像
直接输出中右左就行了的。代码其实没有把单子树翻转,要翻转也很简单,不管了,A了就行直接模拟过程就行了!#include#includetypedef struct node{ int val; struct node *left; struct node *right; void setVal(int v) { this->val = v; left = righ
2015-03-09 17:41:08 403
原创 题目1520:树的子结构
找B的跟节点和A的跟节点一样的点,在遍历左右子树,如果都相同则返回true,否则继续寻找#include#includetypedef struct node { int val; struct node *left; struct node *right; void setVal(int v) { this->val = v; left = right = NULL
2015-03-09 14:06:40 348
原创 题目1519:合并两个排序的链表
写链表就是不停的调。。。发现问题就改。。。蓝后就行了!!!链表的合并而已#include#include#includetypedef struct node{ int val; struct node *next;}Sqlist;int n,m;Sqlist *create(int n){ if(n == 0) return NULL; Sqlist *
2015-02-15 19:19:10 619
原创 题目1518:反转链表
改了改双向链表就行了,因为之前写为了AC,就没考虑那么多,其实头指针和尾指针都应该指向NULL的加上之后就行了。如果不用双向链表,改单向链表的话,只需要遍历,把next改成pre就行了,the same#include#include#includetypedef struct node{ int val; struct node *next; struct node
2015-02-15 17:12:26 331
原创 题目1517:链表中倒数第k个结点
其实直接算链表长度-k就行了上次写的双向链表出了问题,就再写了一次。返回尾指针即可#include#include#includetypedef struct node{ int val; struct node *next; struct node *pre;}Sqlist;int n,k;Sqlist *create(){ Sqlist *l1,*l2,*t
2015-02-15 17:02:52 363
原创 题目1516:调整数组顺序使奇数位于偶数前面
想要降低复杂度,就必须用空间来换,开2个数组记录奇数偶数也许,用空间换时间,而用队列记录的话,空间复杂度开销会小一半#include#include#includeusing namespace std;int a[111111];int main(){ int n; while(scanf("%d",&n) != EOF) { for(int i=0;i<n;++i
2015-02-15 14:01:09 375
原创 题目1515:打印1到最大的N位数
这这这。。。大水题#include#include#includeint main(){ int n; while(scanf("%d",&n) != EOF) { n = pow(10,n)-1; for(int i = 1;i <= n;++i) printf("%d\n",i); } return 0;}
2015-02-15 13:36:51 327
原创 题目1514:数值的整数次方
直接循环次方就行了,用递归行了,注意INF的输出就行了,0不能做被除数#include#include#includedouble powX(double a,int b){ if(b == 1) return a; if(b == 0) return 1; double res = powX(a,b>>1); res*=res; if(b&1) res*=a;
2015-02-15 13:32:22 348
原创 题目1513:二进制中1的个数
用位运算,但是不要用n>>=1;如果n是负数的话,就不会停止,改用flag#include#includeint main(){ int T; scanf("%d",&T); while(T--) { int n; scanf("%d",&n); int count = 0; int flag = 1; while(flag) { if(n&fla
2015-02-15 13:06:13 346
原创 题目1390:矩形覆盖
啊啊啊啊,还是斐波那契数列啊,代码都没敲,因为是2*n,所以放的方式只与前2个放的方式有关。#include#includeint main(){ long long f[99]; f[0]=1; f[1]=1; for(int i=2;i<=70;++i) { f[i]=f[i-1]+f[i-2]; } int n; while(scanf("%d",&n) !=
2015-02-03 17:25:19 326
原创 题目1389:变态跳台阶
一样一样一样,只是转移的时候2个变成了n个,就把前n-1的和保存下来。。。。就没然后了#include#includeint main(){ long long f[66]; f[1]=1; f[2]=2; long long sum=3; for(int i=3;i<=50;++i) { f[i]=sum+1; sum+=f[i]; } int n; whi
2015-02-03 17:08:30 471
原创 题目1388:跳台阶
这这这。。。不还是斐波那契数列吗,别以为换个龟壳我就不认识你。因为只能跳1,,或者2,那么在n这个位置的时候跳的状态只与前面n-1,n-2有关,分别由他们转换来状态转移方程即:f[n]=f[n-1]+f[n-2];是不是很熟悉呀呀呀#include#includeint main(){ long long f[99]; f[0]=1; f[1]=1; for(i
2015-02-03 17:00:33 304
原创 题目1387:斐波那契数列
纯斐波那契数列,没longlong挂了一次。先预处理是为了节省时间,最简单的dp#include#includeint main(){ long long f[99]; f[0]=0; f[1]=1; for(int i=2;i<=70;++i) { f[i]=f[i-1]+f[i-2]; } int n; while(scanf("%d",&n) != EOF)
2015-02-03 16:57:55 329
原创 题目1386:旋转数组的最小数字
额、、、这题什么意思,直接遍历就出来答案了啊,还转什么转。。。#include#includeint a[2000001];int main(){ int n; while(scanf("%d",&n) != EOF) { int l=0; for(int i=0;i<n;++i) { scanf("%d",&a[i]); if(i != 0)
2015-02-03 16:50:44 405
原创 题目1512:用两个栈实现队列
创建2个栈,push到栈1,pop栈2,如果栈2为空,就把栈1的数据全部转到栈2,这样的复杂度比直接暴力要小一些,但感觉直接暴力也能过吧,就不试了。而如果要用2个队列模拟一个栈的话,先压入队列1,如果有pop,就把队列1转移到队列2,pop最上面的,然后如果有压入,就压入队列2,有pop就转移队列1,如此循环。。。。无代码,很简单#include#incl
2015-02-03 16:26:20 410
原创 题目1385:重建二叉树
数据结构题,必须知道中序才能确定树,然后递归就行了。模拟过程如下;先序:1 2 4 7 3 5 6 8中序:4 7 2 1 5 3 8 6先序为1,即根为1,到中序中找到1的位置,然后1左边的为左子树,右边的为右子树分为2部分:先序:2 4 7 中序 :7 2 4先序:3 5 6 8 中序:5 3 8 6重复前面的步骤,构建树。而打印树的过程,把根的输
2015-02-03 15:42:01 439
原创 题目1511:从尾到头打印链表
写的双向链表RE了,不知道肿么了,只好随手改了一个头插#include#include#includetypedef struct node{ int num; struct node *next; //struct node *pre;}SqList;SqList *creat(){ SqList *p1,*p2,*temp; p1=(SqList *)malloc(
2015-01-31 19:29:14 369
原创 替换空格
找到空格有多少个,从后遍历,遇到空格就替换o(n)复杂度#include#includechar str[1111111]; int main(){ while(gets(str)) { int cnt=0; int len=strlen(str); for(int i=0;i<len;++i) { if(str[i] == ' ') cnt++;
2015-01-31 18:45:06 396
原创 题目1384:二维数组中的查找
判断要查找的数在不在这一行的范围内,然后2分查找就行了#include#includeint a[1111][1111];int n,m;int t;bool fun(int n){ int l=0,r=m-1,mid; while(l <= r) { mid=(l+r)/2; if(a[n][mid] > t) { r=mid-1; } else
2015-01-31 18:42:34 386
原创 题目1506:求1+2+3+...+n
函数指针,天了噜。。。#include#includeint n;typedef int (*fun)(int);//定义一个返回值是int,带一个int参数的函数指针,fun int fun1(int n){ return 0;}int fun2(int n){ fun f[2]={fun1,fun2}; return n+f[!!n](n-1);}int m
2015-01-31 18:39:47 442
转载 javascript深入理解js闭包
作者:http://www.jb51.net/article/24101.htm闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 一、变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域。 变量的作用域无非就是两种:全局变量和局部变量。 Javascript语言的特殊之处,
2014-11-23 20:35:15 409
转载 jquery插件,回到顶部
/** * escrolltotop jquery回到顶部插件,平滑返回顶部、 * * 参数设置 * startline : 出现返回顶部按钮离顶部的距离 * scrollto : 滚动到距离顶部的距离,或者某个id元素的位置 * scrollduration : 平滑滚动时间 * fadeduration : 淡入淡出时间 eg:[ 500, 100
2014-11-21 23:55:52 531
原创 drap插件
;(function($,window,document,undefined) { var pluginName = "drag", defaults = { onDrag: function(event,elem){}, onMove: function(event,elem){}, onDrop: function(event,elem){} }, Plugin = fun
2014-11-21 22:21:58 512
转载 详解jquery插件中(function ( $, window, document, undefined )的作用
在jquery插件中我们经常看到以下这段代码;(function ( $, window, document, undefined ){ //函数体内具体代码 })(jQuery, window,document);对于很多初学者来说很难明白这表示什么,下边我将为大家介绍其相应的作用。1、代码最前面的分号,可以防止多个文件压缩合并以为其他文件最后一行语句没加分号,而引起合并
2014-11-21 12:36:29 600
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人