- 博客(30)
- 资源 (3)
- 收藏
- 关注
原创 编程之美 2.18:数组分割 (涉及 动态规划)
题干有一个无序,元素个数为2N的正整数数组。要求:如何这个数组分割为元素个数为N的两个数组,并使两个子数组的和最接近。我的解法我的解法居然没有出现在书上和博客上,所以很让我怀疑我的解法有漏洞,但是又死活找不到。如下图所示,将数组排序后:最小的1和最大的20,给上面的一个子数组次小的3和次大的17,给下面的数组然后一直重复剩下两个7和8的时候,一个给上面一个给下面
2014-03-31 20:37:34 1876 1
原创 2014阿里巴巴实习生笔试 压轴题:分析 跳跃表 “查找”的时间复杂度
缘由本来可以和上一篇博客写在一起的,但是今天整个下午我都被这个跳跃表纠缠了,缠的最后我还不能说自己完全全全的说得透,所以只好单开一篇博客了。所以我也只能说说对这个东西的感悟。我并不打算完整的叙述这个东西,这是因为算法导论的公开课实在是讲的太透彻了,是否能够领悟看个人天资了。参考来源首先写这个是为了给看这篇博客的朋友有一个良好的引导:强烈建议直接观看:算法导论的公开课
2014-03-30 20:00:02 2277
原创 昨夜阿里实习生笔试:印象深刻的几道题
缘由昨晚去阿里巴巴的北邮考场参加笔试:今年的实习生。有几道题让我印象深刻。暂时记录于此。沿路和一个在北邮读过硕的同学聊了聊,说北邮很有计算机氛围,而且自习室经常爆满,为了抢座还有打架的。虽然别人打架的原因不调查不能妄下结论,不过北邮学计算机的氛围真是让我好生羡慕。过桥题题干甲、乙、丙、丁四个人过桥,分别需要1分钟,2分钟,5分钟,10分钟。因为天黑,必须借助于手电筒过桥,可
2014-03-30 18:23:17 2380 5
原创 编程之美 2.17 :数组循环移位 (199)
题干设计一个算法,把一个含有N个元素的数组循环右移K位,要求时间复杂度为O(N),且只允许使用两个附加变量。我的解答思路首先,如果k=1,也就是循环移动1位,那我们将有从后往前遍历一次即可。使用一个变量循环,另一个变量作储存最后一个数组元素。当然,上面的思路只能针对k=1的情况。第二个思路是,如果给了我k,那么其实我已经直接知道每一个数组元素最终的位置了,那么我针对每一个数
2014-03-28 22:31:13 766
原创 设计模式:桥接模式
缘由本来想专心于C,以及一些ngnix、redis的开源高大上的软件时,学校开了个课讲软件模式,老师留了一道题和桥接模式有关。我看 head first 设计模式的桥接模式没看懂,最终还是看:桥接模式 ,这位博主终于用辣不辣的牛肉面或者是猪肉面让我明白了。对桥接模式的理解根据上面所说的博主的作法,关键在于面有分为辣不辣的牛肉面还是猪肉面的,我们可以做4个子类来显示辣椒牛肉面、无辣牛
2014-03-27 22:28:00 804
原创 nginx源码学习之ngx_queue:双向链表
缘由今天开始看书深入理解Nginx。所以本博客所述的内容大多数都是此书的内容,算作是一种笔记。ngx_queuengx_queue是一个双向链表,更多的内容请看深入理解Nginx一书的217页。其功能和函数一共由两个文件来完成。ngx_queue.cngx_queue.h该双向链表完成了常见的功能(在下面的ngx_queue.h文件中可以看到,而在下面的ngx_
2014-03-26 19:57:49 719
原创 编程之美 3.8 :求二叉树中节点最大的距离
题干如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数。写一个程序求一棵二叉树中相距最远的两个节点之间的距离。(P241)我的解答没看答案前我的想法就是收集所有的叶子节点,然后将计算每对叶子节点的距离,找出距离最大的。显然距离最大的两个节点必然在叶子节点,或者一个根节点、一个是叶子节点。为什么说显然,我想是从图中观察分析的出的吧
2014-03-25 21:12:33 893
原创 unix高级环境编程 第二十章 数据库函数库:习题讨论
缘由源代码看完了,大概看懂了,现在来自己回答一下课后练习题,来看看自己是不是真的看懂了。习题20.1题干在_db_dodelte中使用的加锁是比较保守的。例如,如果等到真正要用空闲链表时再加锁,则可获得更大的并发度。如果将调用write_lock移到调用_db_writedat和_db_readptr之间会发生什么呢?_db_dodelte方法如下:/* * De
2014-03-24 17:03:51 700
原创 编程之美 3.4 的扩展问题:遍历一遍单链表,使得元素顺序相反
题干编写一个函数,给定一个链表的头指针,要求只遍历一次,将单链表中的元素顺序反转过来。解题思路我想按着顺序把一个指针的下一个元素改为它之前的元素,最后返回表尾元素,所以在一次遍历过程中需要额外三个指针指向当前元素的前一个元素指向当前元素指向当前元素的下一个元素这是因为在改变一个指针的指向时,会失去其下一个元素,所以必须要先保存指向当前元素的下一个元素。因为要改为指向前一
2014-03-24 09:20:52 1283
原创 编程之美3.3 计算字符串的相似度(我的失败思路)
题干许多程序会大量使用字符串。对于不同的字符串,我们希望能够有办法判断其相似程序。我们定义一套操作方法来把两个不相同的字符串变得相同,具体的操作方法为:修改一个字符(如把“a”替换为“b”);增加一个字符(如把“abdd”变为“aebdd”);删除一个字符(如把“travelling”变为“traveling”);比如,对于“abcdefg”和“abcdef”两个字符串来说,我
2014-03-22 23:15:38 1342
原创 正确使用unix高级环境编程的源码 以及 数据库函数库代码的运行
缘由apue这本书看了这么久,例子代码也写了一堆堆。直到看到数据库函数库这一章算是真正的让我兴奋了,写了那么多api,终于能用来实实在在做出一个东西来了,而且做的东西非常叼哦,是数据库。不过今天正准备着先跑跑程序和看看源码来着,确发现怎么也运行不了。这是因为我单独把我自己以为需要的文件:apue_db.h和db.c拷在我自己写的代码的文件,然后直接编译,结果一大堆错误,发现无论如何也运行不
2014-03-22 15:32:03 1143 1
原创 编程之美 3.2 :电话号码对应的英文单词
备份 12点28/* * 3.2电话号码对应的英文单词 * * 刚开始我还以为本题会给我一个多么惊人的答案 * 结果发现,也只是穷举之后再去和字典匹配 * * 尽管如此,本题虽然给了伪代码,但是还是比较难看懂,本着 * 纸上得来终觉浅 绝知此事要躬行的要义,还是自己写写的好。 */#include #include char c[10][10]={"", //0
2014-03-21 20:21:01 1940
原创 编程之美3.1:字符串位移包含问题(手写代码以及改成)
题述给定两个字符串S1和S2,要求判断S2能否被S1做循环移位得到的字符串包含。例如:s1=AABCD和S2=CDAA,返回true, s1=ABCD和s2=ACBD,返回false。手写代码思路我倒是一眼就看穿了:将s1接在s1后面,形成两个s1,直接判断s2是否存在于2个s1之中即可解决s1是循环位移的问题不过这个手写的代码部分真的就是惨不忍睹了。如下图所示:
2014-03-20 17:16:53 763
原创 unix高级环境编程 例子 代码实现练习 第十四章:高级IO
程序清单 14-1 长的非堵塞write/** * 程序清单 14-1 长的非堵塞write P357 * * zy: * 可以运行,和书上类似。 */#include "apue.h"#include "error.c"#include #include //定义了通过错误码来回报错误资讯的宏 //宏定义为一个int型态的左值, 包含任何函式使用errno功能所
2014-03-20 12:44:44 741
原创 unix高级环境编程 例子 代码实现练习 第十三章:守护进程
程序清单 13-1 初始化一个守护进程/** * 程序清单 13-1 初始化一个守护进程 P343 * zy: * 书上解释的很清楚了,我只是敲了一遍代码 */#include "apue.h"#include //功能:记录至系统记录。#include //File Control Operations#include //sys/resource.h - def
2014-03-18 12:18:57 759
原创 unix高级环境编程 例子 代码实现练习 第十二章:线程控制
程序清单 12-1 以分离的状态创建的线程/** * 程序清单 12-1 以分离的状态创建的线程 P315 * zy: * 没什么好说的,说的很清楚了 * */#include #include "apue.h"int makethread(void *(*fn)(void *),void *arg){ int err; pthread_t tid; pthread_a
2014-03-17 21:48:38 1064 1
原创 unix高级环境编程 第二版 P328 翻译错了一个地方(第十二章 线程控制)
中文版如下图:上面那句: 这样其他线程试图对这个互斥量的加锁就会被堵塞是错误的,应该是同一个线程。相当与于说,同一个线程在信号处理程序之前调用了一次getenv_r,加了一次锁,然后信号来了,又在信号处理程序中调用getenv_r,又加了一次锁。那么如果不是递归锁,就会死锁。所以必须要递归锁。另付上英文原版为证明:If we make getenv_r
2014-03-17 20:19:09 713 1
原创 unix高级环境编程 例子 代码实现练习 第十一章:线 程
程序清单 11-1 打印线程ID/** * 程序清单 11-1 打印线程ID P290 * * zy: * * 创建了一个线程并且打印了ID * * 编译命令:gcc test2.c -lpthread * 因为pthread 库不是 Linux 系统默认的库,连接时需要使用静态库 libpthread.a。 * 运行结果:asd@asd-desktop:~/workspa
2014-03-17 15:08:59 812
原创 unix高级环境编程 例子 代码实现练习 第十章:信号
程序清单 10-1 捕捉SIGUR1和SIGUSR2的简单程序 P241/** * 程序清单 10-1 捕捉SIGUR1和SIGUSR2的简单程序 P241 * * zy: * 这两个信号用于用户随意使用 * * 另外在测试中使用了kill命令,注意kill只是发送信号的命令,而不是真的杀死 * */#include "error.c"#include "apue.h
2014-03-16 13:32:17 1190 1
原创 unix高级环境编程 例子 代码实现练习 第九章:进程关系
程序清单 9-1 创建一个孤儿进程组 P229 /** * 程序清单 9-1 创建一个孤儿进程组 P229 * * zy: * 注意这里是孤儿进程组,是整个进程组都是孤儿, * 我们一般称一个父进程已经终止的进程为孤儿进程,这种进程将会被init进程收养 * * 孤儿进程组的定义还是比较绕的,如下: * 如果该组成员的父进程要么是同一个组的成员,要么是不是该组所属会话的成员
2014-03-14 09:38:32 723
原创 unix高级环境编程 例子 代码实现练习 第八章:进程控制
程序清单 8-1 fork函数示例 P173/** * 程序清单 8-1 fork函数示例 P173 * * zy: * 在下面的代码中, * 关键是区分好 * 父进程执行的部分 * 子进程执行的部分 * 父、子进程都执行的部分 * * 父进程和子进程谁先进程是不确定的。 */#include "apue.h"#include "error.c"int glob
2014-03-13 12:03:29 919
原创 编程之美里的挖雷游戏:
缘由今天的新书:编程之美 到手了,随便读了翻了一下。就翻到一个有趣的问题,计算扫雷游戏中未知方块是雷的概率。看看图,就是那些还可以点的方块是雷的概率是多少。相信大家都玩过,我就不介绍游戏规则了。思路简单的思考之后,我有了一个思路:对每一个出现的数字作如下计算针对一个数字,统计数字周边可点击的方块的个数数字的数值除以方块的个数,就是周边方块是雷的概率如果多个数字计算了
2014-03-12 17:01:24 496
原创 hash的简单应用:完成c语言中的define关键字的功能
缘由经常读到这样那样的技术,hash表的技术很早就学习过了,但是一直不太明白它能拿来做什么,这次发现其可以用来完成C语言中define关键字的功能,顿时觉得非常伟大。故记录了下来。其实现在学的什么多东西都这样的感觉,感觉学到了,了解了,但是却不知道能拿来做什么。最近了解到用C写的redis可以作为缓存来使用,以nosql方式完成,或者说是键值对的方式,速度非常快,并且一直存放在内存中。据说
2014-03-12 12:34:00 1028
原创 unix高级环境编程 例子 代码实现练习 第七章:进程环境
程序清单 7-1 经典c程序 P148/** * 程序清单 7-1 经典c程序 P148 * * zy: * 注意这个经典的c程序是不完整的,没有返回值,没有声明main的返回类型 * 才会造成这样的情况 * 这是因为直接返回了main中栈和寄存器的内容 * * 书上说返回码的是随机的,但是我始终得到8 * */main() { printf("hello!");
2014-03-09 09:18:34 758
原创 unix高级环境编程 例子 代码实现练习 第六章:系统数据文件和信息
程序清单 6-1 getpwnam函数/** * 程序清单 6-1 getpwnam函数 P135 * * zy: * 返回口令文件,也就是/etc/passwd文件中的每一项。 * 本列我们写一个函数,调用函数可以得到与传入参数name相同的某一个口令文件的所有项 * 实际上getpwnam函数已经被实现好了,我们直接调用即可,但是这里我们只是写出了其一个实现 */#in
2014-03-08 20:43:28 722
原创 unix高级环境编程 例子 代码实现练习 第五章:标准IO的效率
程序清单 5-1 用getc和putc将标准 P117/** * 程序清单 5-1 用getc和putc将标准 P117 * * zy: * 代码简单到我都不想再敲一遍,作者做了这么多, * 最关键的就是想说: * 标准IO库与直接调用read和write函数相比并不会慢非常多。 * 对于应用程序来说,主要是应用业务消耗了非常多的时间,而不是IO。 * */#include
2014-03-08 16:58:58 690
原创 unix高级环境编程 例子 代码实现练习 第四章:文件和目录
程序清单 4-1 对没一个命令行参数打印文件类型/** * 程序清单 4-1 对没一个命令行参数打印文件类型 * * zy: * 这就是说我们给一个指定的文件,请利用api判断出这个文件是什么类型 * 主要是利用了定义了在的宏,P72有详细的解释 * 我们可以判断出是普通文件、字符特殊文件等等 * * */#include "apue.h"#include "error
2014-03-08 13:42:19 994
原创 unix高级环境编程 例子 代码实现练习 第三章:文件I/O
程序清单 3-1“ 测试能否对标准输入设置偏移量/** * 程序清单 3-1“ 测试能否对标准输入设置偏移量 P51 * * zy: * 对lseek函数加深认识。 * * 书中第一个例子/etc/motd是进入tty的一段文字,所以可以随意调整 * 书中第二个例子表示对管道进行lseek,但是不可以的 * 书中第三个例子,我相应的目录下没有找到该文件,我使用mkfifo
2014-03-07 10:44:20 1002
原创 unix高级环境编程 例子 代码实现练习 第一章:unix基础知识
缘由花了接近一周的时间死劲的读新买了的:所以,没有写博客,现在差不多大概读完了,但是没有敲代码,没有查看练习题,只是对这本书有一个粗浅的认识。现在的计划是:敲完书中所有的例子代码然后解决练习题注意:主要是写代码,不会重复书中的话。当然真的有价值的总结还是会进行的,原来犯的错误就是老是总结书中的观点、重复书中的话,非常耽误时间。今天是unix的基础知识,所以还看不
2014-03-06 16:40:33 725
原创 统计所有单词出现的次数:二叉数
缘由这是C程序设计语言 第二版 K&R121的一道例题,例子是为了讲述”自引用结构“的问题,但是我认为其涉及了一个更为重要的概念,二叉数。的
2014-03-01 13:52:16 1203
CLRS_exercises_2.1-1.xlsx
2015-02-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人