- 博客(62)
- 收藏
- 关注
原创 剑指Offer 1521 二叉树的镜像
第15题:题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。 #include #include #include using namespace std;struct TreeNode{ TreeNode *left; TreeN
2013-09-16 00:09:13
1139
原创 在排序数组中查找和为给定值的两个数字
14:题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。 思路:由于数组为升序,因而可以设置头尾两个指针,从第一个元素和最后一个元素相加
2013-09-15 13:53:31
596
原创 返回单链表中倒数第N个元素问题
13.题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。链表结点定义如下: struct ListNode{ int m_nKey; ListNode* m_pNext;};思路:维护两个指针,使 它们之间的距离为n。让这两个指针同步地在这个单链表上移动,保持它们的距离 为n不变。当第二个指针指到空时,第一个指针即为所求
2013-09-14 22:25:20
1051
转载 求1+2+…+n
12.题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。#include #include #include using namespace std;int nFactorial(int n){ int num = 0; (n > 0) && (num = n + n
2013-09-14 19:51:45
534
转载 编程之美3.8 求二叉树中节点的最大距离
11. 求二叉树中节点的最大距离如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数。写一个程序,求一棵二叉树中相距最远的两个节点之间的距离。分析: 对任意一个节点,以该节点为根,假设这个根有k个孩子节点,那么相距最远的两个节点U和V之间的路径与这个根节点的关系有两种情况。 1.若路径经过根Root,则U和V是属于不同的子树的
2013-09-14 13:02:34
661
原创 剑指Offer 1361 翻转单词顺序
10. 翻转句子中单词的顺序。题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。例如输入“I am a student.”,则输出“student. a am I”。#include #include #include using namespace std;void Reverse(c
2013-09-09 09:14:54
603
原创 剑指Offer 1367 判断整数序列是不是二元查找树的后序遍历结果
九度: http://ac.jobdu.com/problem.php?pid=13679. 判断整数序列是不是二元查找树的后序遍历结果题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果: 8 / \ 6 10
2013-09-07 18:00:44
565
转载 数据库范式概念解析(第一范式,第二范式,第三范式)
大部分数据库从业人员都知道关系数据库有三个基本的范式,即:第一范式,第二范式,第三范式。当然也有牛人知道BC范式,第四范式,第五范式,第六范式,甚至还有个DK范式。本人对数据库的范式概念也是一知半解的,想想有些可笑,搞数据库的竟然不了解关系数据库的基础——范式。这不最近查阅了不少资料,今天把这些东东总结一下。 范式:英文名称是 Normal Form,它是英国人 E.F.Codd(
2013-09-01 22:06:53
557
原创 编程之美3.6 编程判断两个链表是否相交
//编程之美3.6 编程判断两个链表是否相交。 1. 把第二个链接在第一个链后面,如果得到的链表有环,则两链表相交。O(n)的方法判断是否有环,申请两个指针,一个每次递增一步,一个每次递增两步,如果有环,两者必然重合。2.遍历第一个链表,记录最后一个节点。然后遍历第二个链表,将最后一个节点和第一个链表的最后一个节点作比较。时间复杂度:O((length(h1)+length(h2)))
2013-08-31 23:04:23
482
原创 编程之美2.5 寻找最大的k个树
5.查找最小的k个元素题目:输入n个整数,输出其中最小的k个。例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。#include #include #include using namespace std;void MaxHeapify(int a[], int i, int n){ int left = 2*i+1; in
2013-08-23 15:40:28
460
原创 二元树中找出和为某一值的所有路径
题目来源:http://bbs.youkuaiyun.com/topics/3501189684.在二元树中找出和为某一值的所有路径题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如 输入整数22和如下二元树 10 / \ 5 12 / \ 4 7
2013-08-22 13:28:59
505
原创 编程之美2.14 求数组的子数组之和的最大值
3.求子数组的最大和题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。#include #include
2013-08-21 18:22:25
431
原创 求栈的最小元素
题目来源:http://bbs.youkuaiyun.com/topics/3501189682.设计包含min函数的栈。定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。思路:我看到这道题目时,第一反应就是每次push一个新元素时,将栈里所有逆序元素排序。这样栈顶元素将是最小元素。但由于不能保证最后push
2013-08-20 18:56:42
552
原创 二元查找树转变成排序的双向链表
题目来源:http://bbs.youkuaiyun.com/topics/3501189681.把二元查找树转变成排序的双向链表输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。 10 / \ 6 14 / \ / \4 8 12 16 转换成双向链表4=6=8=10=12=14=1
2013-08-20 16:16:41
565
原创 词频统计:字典树+dfs
给出n行单词,统计出每个单词出现了几次:#include #include #include using namespace std;struct Tire{ int count; struct Tire *tire[26];}*a;string res = "";void init(){ a = new Tire; for(int i = 0
2013-08-19 21:46:29
686
原创 HDU1251 统计难题
HDU 1251 字典树应用: 统计给定字符串为前缀的单词的数量 http://acm.hdu.edu.cn/showproblem.php?pid=1251 又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来节约存储空间,最大限度地减少无谓
2013-08-19 16:10:24
423
原创 MapReduce链接不同来源的数据
在关系型数据库中 join是非常常见的操作,各种优化手段已经到了极致。在海量数据的环境下,不可避免的也会碰到这种类型的需求,例如在数据分析时需要连接从不同的数据源中获取到的数据。不同于传统的单机模式,在分布式存储的下采用MapReduce 编程模型,也有相应的处理措施和优化方法。Reduce sidejoin Hadoop中MapReduce中的主要过程依次是读取数据分块,map
2013-08-13 10:58:45
673
原创 MapReduce中二次排序
MR自带的源码SecondarySort,即二次排序。二次排序可以实现类似下例功能:计算每年的最高气温。如果key设置为气温,value设置为年份及其他信息,那么我们不必遍历他们以找到最大值,只需获取每年的第一个值而忽略其他。但这不是最有效的解决问题的方法,考虑将key变成复合的,即年份和气温,先按年份升序,再按气温降序。但是这样不能保证同一年的记录去同一个reducer,需要设置partitio
2013-08-13 10:58:43
515
原创 HDFS上文件处理、Java文件读写
使用Java api实现文档的上传/下载/删除文件:1 上传文件到HDFS有时需要自动将文件上传到HDFS上,在java中可以通过如下函数实现:public static boolean put2HDFS(String src , String dst ,Configuration conf){ Path dstPath = new Path(dst) ;
2013-08-13 10:58:41
509
原创 vim配置
1. 安装vim:apt-get install vim后,执行命令whereis vim,可以看到返回结果:vim: /usr/bin/vim /usr/bin/vim.tiny /usr/bin/vim.basic/etc/vim /usr/bin/X11/vim /usr/bin/X11/vim.tiny/usr/bin/X11/vim.basic /usr/share/vim/u
2013-08-13 10:58:38
519
原创 Scrapy递归抓取数据存入数据库(示例二)
参考:http://www.hulufei.com/post/Some-Experiences-Of-Using-Scrapy http://www.shahuwang.com/?p=1620scrapy爬取了链接之后,如何继续进一步爬取该链接对应的内容?parse可以返回Request列表,或者items列表,如果返回的是Request,则这个Request会放到下一
2013-08-13 10:58:36
1939
原创 Scrapy抓取数据存入数据库(示例一)
一、示例一:Scrapy抓取豆瓣编程分类第一页的图书名称和链接并存入数据库参考文章:http://tech.sina.com.cn/s/s/2008-12-24/09322685698.shtml1. 要抓取的文件在items.py中定义,我们要抓取的是图书的名称和链接2. spiders下的文件from scrapy.spider import BaseSpiderfrom sc
2013-08-13 10:58:34
2548
原创 Linux安装mysql
参考:http://my.oschina.net/winHerson/blog/112309 http://www.linuxidc.com/Linux/2008-02/11137.htm1. 首先到mysql的下载中心上下载最新的tar.gz包2.下载后得到文件mysql-5.6.10-linux-glibc2.5-i686.tar.gz,然后将其解压,并重命名为m
2013-08-13 10:58:32
354
原创 实现Scrapy的Demo
参阅文档:http://doc.scrapy.org/en/latest/intro/overview.htmlhttp://doc.scrapy.org/en/latest/intro/tutorial.html#intro-tutorialhttp://doc.scrapy.org/en/latest/intro/install.html#intro-installhttp://do
2013-08-13 10:58:29
790
原创 vim常用命令
1. 光标移动h(左)j(下)k(上)l(右)移动nk 上移n行nj 下移n行$ 移动光标到本行结尾处.0 移动光标到本行最开头.H 移动光标到屏幕的首行.L 移动光标到屏幕的尾行.gg 移动光标到文档首行.G 移动光标到文档尾行.ctrl + f 即 page down.ctrl + b 即 page up.w移动光标到下一个单词开始, 2w跳过一个单词的下一个单
2013-08-13 10:58:27
433
原创 Linux中运行python实现错误日志定时报警
又到了毕业季,实验室不是很忙,要给自己找点事做。于是打算从6.21开始学习python。中间又是拍毕业照又是吃散伙饭,还是赶紧写个python的小程序,免得前面看的都忘记了。1. crontab用法crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。crontab文件包
2013-08-13 10:58:25
1354
原创 ubuntu12.04下Hadoop单机版、集群搭建以及Hadoop常用指令
搭建Hadoop单机版:http://www.linuxidc.com/Linux/2013-01/78112.htm搭建Hadoop集群:http://www.linuxidc.com/Linux/2013-01/78113.htmLinux的inode上网配置:http://wenku.baidu.com/view/e4f7fb38376baf1ffc4fad3e.html登录sl
2013-08-13 10:58:21
511
原创 POJ1015 Jury Compromise
类似于背包问题,n个人每一个都有取或者不取。在0-1背包中,定义一个递归式dp[i][j],表示前i个物品,在背包容量大小为j的情况下,最大装载量。动态规划方程如下:dp[i][j]= max(dp[i-1][j], dp[i-1][j-c[i]+v[i])在这个问题中,d[i]-p[i]看成背包中每个物品占用的体积。设dp[i][j][k]前i个人中选择j个人差值为k的总分最大和。状态转移
2013-08-13 10:58:19
394
原创 POJ1125 Stockbroker Grapevine
Floyd求每点到其它点的最短路,最长路径即是传播所需的最大时间。#include #include #include #include using namespace std;bool cmp(int a, int b) { return a> b;}int main() { int t; int n; int contact; in
2013-08-13 10:58:16
390
原创 POJ1088 滑雪
DP+dfsdp[i][j]:表示从坐标i,j为起始点的最长下降路径。搜索每一条路径取最值。代码:#include #include #include #include using namespace std;int map[150][150];int R, C;int dp[150][150];int dfs(int i, int j) { if(dp[
2013-08-13 10:58:14
327
原创 POJ1083 Moving Tables
题目要求时间最少,即尽可能让占用不同走廊的桌子并行运行。设置一数组:dp[200],初始化为0。记录每个走廊占用的次数,所用时间极为最大占用次数*10代码:#include #include #include #include using namespace std;struct node { int start; int end;};bool cmp(
2013-08-13 10:58:12
535
原创 POJ1050 To the Max
枚举+DP枚举任意两行之间的矩阵,求出每列的和,转化为一维数组求最大子段和。代码:#include #include #include #include using namespace std;int main() { int n; int p; int a[150][150]; int sum[150]; int temp;
2013-08-13 10:58:09
330
原创 POJ1018 Communication System
动态规划题目:有一个系统有n个设备,每个设备有m个制造商,每个制造商制造的设备的最大带宽和价值是不同的,题目要求计算n个设备组成的系统中max(B/P)。其中B为带宽最小值,P为最大值。解题思路:选出所有带宽的最大值和最小值,定下带宽,随后从小到大枚举。剪枝——对每个厂商的设备按带宽从大到小枚举,若最大带宽都小于我们占定的带宽,则不需要在对这种情况枚举,直接剪枝。代码:#i
2013-08-13 10:58:07
479
原创 MapReduce与遗传算法、MapReduce与粒子群算法结合与实现
遗传算法(大白话解析遗传算法):http://www.cnblogs.com/heaad/archive/2010/12/23/1914725.htmlJava代码用遗传算法解决0-1背包:http://wenku.baidu.com/view/20beb6da6f1aff00bed51ea8.html 一、MapReduce和遗传算法结合:(参考文献:MapReduce-GA-eSci
2013-08-13 10:58:05
3066
2
原创 git使用
执行git push origin master时,出现Permissiondenied(publicky)错误,这是ssh的权限没有设置好。解决办法:1. $ git config --global user.name "***" $ git config --globaluser.email "***"2. 查看是否已经有了ssh密钥:cd ~/.ssh3. 生存密钥:
2013-08-13 10:58:03
386
原创 MRQEA算法(MapReduce和量子进化算法结合)并应用于0-1背包
参考文献:《MapReduce与量子进化算法的研究及应用》量子进化算法具体流程:1. 进化代数初始化:T=0;2. 初始化种群Q(t);3. 由Q(t)生成P(t);4. 评价群体P(t)的适应度,保存最优解;5. 停机条件判断:当满足停机条件时,输出当前最优个体,算法结束,否则继续;6. 利用量子旋转门更新Q(t),T=T+1,转到3;Ready: 初始化种群Q(t)Ma
2013-08-13 10:58:00
654
原创 进化算法
进化算法概念:以达尔文的进化思想为基础,通过模拟生物进化过程与机制的求解问题的自组织、自适应的人工智能技术。生物进化是通过繁殖、变异、竞争和选择实现的;而进化算法则主要通过选择、重组和变异这三种操作实现优化问题的求解。代码:http://wenku.baidu.com/view/dadb76601ed9ad51f01df2f1.html1. pop=initpop(popsize,ch
2013-08-13 10:57:58
1892
原创 编程之美3.1 字符串移位包含问题
//编程之美3.1 字符串移位包含问题。判断s2能否被s1做循环移位得到的字符串包含,若直接判断效率较低。可以将s1s1连接起来,如果s2可以通过循环移位得到,则s2一定是s1s1的子串,可以通过调用strstr得到。时间复杂度O(n*m)。不过strstr的实现效率较低,可以使用kmp判断是否是子串。每当一趟匹配过程中出现字符比较不等时,不回溯,利用已经得到的“部分匹配”的结果将模式串向
2013-08-13 10:57:56
545
原创 2013年01月01日
//求一个字符串中连续出现次数最多的子串。#include #include #include #include using namespace std;pair fun(conststring& str){ vector substrs; int maxcount = 1; int count = 1;
2013-08-13 10:57:54
348
原创 正则表达式
java结合matlab时,取matlab的数组,去掉如下字段Columns * through *:正则表达式表示:String origin = result[0].toString().replaceAll("Columns.*\n","");.*匹配任意个任意字符,但不能是空行。String eachterm[] = origin.split("\\s{1,}");以任意多
2013-08-13 10:57:51
321
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人