上一页 1 2 3 4 5 6 7 ··· 11 下一页
摘要: 1 #include <unistd.h>2 3 pid_t fork(void);一个现有进程可以调用fork函数创建一个新进程。由fork函数创建的新进程称为子进程(child process)。fork函数被调用一次,但返回两次。两次返回的唯一区别是子进程的返回值为0,而父进程的返回值则是新子进程的进程ID。将子进程ID返回给父进程的理由是:因为一个进程的子进程可以有多个,并且没有一个函数使一个进程可以获得其所有的子进程ID。使子进程得到返回值0的理由是:一个进程只会有一个父进程,所以子进程总是可以调用getppid获得其父进程ID。子进程和父进程继续执行fork调用之后的指 阅读全文
posted @ 2012-07-04 13:56 Cavia 阅读(1409) 评论(1) 推荐(1) 编辑
摘要: C标准库中提供了两个用于生成随机数的函数,rand()和srand()。头文件为stdlib.h(cstdlib)。 1、 int rand(void);返回[0,RAND_MAX]内的一个伪随机数。该数通过一个算法获得,该算法每次返回一个随机数序列,而该序列由种子决定。所以为了产生不同的序列,种子必须不同,而种子的设置将会由srand()函数实现。2、 void srand(unsign... 阅读全文
posted @ 2012-06-22 22:26 Cavia 阅读(181) 评论(0) 推荐(0) 编辑
摘要: Q:一个int数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它。能否只用一个额外数组和少量其它空间实现。 A:如果我们遍历数组是对于每一个元素都要往左和往右判断是否符合条件,则时间复杂度为O(n^2)。既然可以用辅助数组,就可以利用空间换时间的办法进行优化。 原数组为a[n],定义一个辅助数组为b[n]。 首先我们求左边数都小于等于它... 阅读全文
posted @ 2012-06-20 14:51 Cavia 阅读(413) 评论(1) 推荐(0) 编辑
摘要: Q:12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种? A:假设12个人的身高为1,2,3,…,12,我们要将其分为两排,每排六个人,并且要符合题目所述规律,所以我们可以得出以下结论: a、第一排第一个数字只能为1,第一排第二个数字只能为2,3,第一排第三个数字只能为3,4,5,…,第一排第六个数字只能为6,7,8,9,10,11。... 阅读全文
posted @ 2012-06-20 09:41 Cavia 阅读(495) 评论(0) 推荐(0) 编辑
摘要: Q:有一个复杂链表,其结点除了有一个m_pNext指针指向下一个结点外,还有一个m_pSibling指向链表中的任一结点或者NULL。请完成函数ComplexNode* Clone(ComplexNode* pHead),以复制一个复杂链表。 A:一开始想这道题毫无思路,如果蛮来,首先创建好正常的链表,然后考虑sibling这个分量,则需要O(n^2)的时间复杂度,然后一个技巧便可以巧妙的... 阅读全文
posted @ 2012-06-19 20:39 Cavia 阅读(4439) 评论(1) 推荐(1) 编辑
摘要: Q:输入二叉树中的两个结点,输出这两个结点在数中最低的共同父结点。 A:对于一个子树的根结点来说,如果那两个结点分别位于该子树的左右子树,则最低共同父结点为该子树的根结点,如果那两个结点都位于该子树的左子树,则最低共同父结点位于该子树根结点的左子树,否则来自右子树。于是递归代码就出来了。 struct Node{ int val; Node *left,*right;};Node* ... 阅读全文
posted @ 2012-06-19 19:41 Cavia 阅读(1377) 评论(0) 推荐(0) 编辑
摘要: Q:题目:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。 A:如果将数组排序,则相同的数字肯定会在一起,因为该数字的个数超过数组长度的一半,所以该数字组成的子数组肯定会跨过数组的中间位置,所以直接返回arr[n/2]即可。不过这个方法需要先排序。 在考虑另一种方案,如果每次删除两个不同的数字,则在剩下的数组中该数字出现的次数仍然超过一半,所以就把该问题转化为一个规模更... 阅读全文
posted @ 2012-06-19 16:18 Cavia 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 上图表示一个trie树,有abc,abcd,abd,b,bcd,efg,hii七个字符串,红色点代表为一个字符串的最后一个字符。 上图同样表示一个trie树,有abc,d,da,dda四个字符串,字符串尾部同样进行了标记。 已知n个由小写字母构成的平均长度为10的字符串,判断其中是否存在某个串为另一个串的前缀子串,有三种方法: 1、遍历字符串集合,对于遍历的每两个字符串,判断其... 阅读全文
posted @ 2012-06-19 15:19 Cavia 阅读(272) 评论(0) 推荐(0) 编辑
摘要: Q:实现函数double Power(double base, int exponent),求base的exponent次方。不需要考虑溢出。 A:这是一道很简单的题,但是考虑全面和优化代码却不是那么容易,一开始乍一看可能就写出这样的代码 double Power(double base,int exponent){ double result=1.0; for(int ... 阅读全文
posted @ 2012-06-19 09:38 Cavia 阅读(209) 评论(0) 推荐(0) 编辑
摘要: Q:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。A:对于这个题目,办法就是遍历第一个字符串,每次遍历时查找该字符是否在第二个字符串中,如果在,则要删除该字符。所以该问题就分为两步,查找和删除。按照最笨的做法,查找使用线性查找,即对于每一个字符,遍历第二个字符串,看是否出现。这样时间复杂度太高,如果第一个字符串长度为m,第二个字符串长度为n,则时间复杂度为O(mn)。再看删除,最笨的方法是,对于每一个要删除的字符,将其后的每一个字符都向前挪一位,这样时间 阅读全文
posted @ 2012-06-18 14:30 Cavia 阅读(458) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 ··· 11 下一页