以下排序中时间复杂度最差的是
A 归并排序
B 选择排序
C 希尔排序
D 堆排序
B
当参数*x==1, *y==1, *z==1时,下列不可能是函数add的返回值的( )?
int add(int *x, int *y, int *z){
*x += *x;
*y += *x;
*z += *y;
return *z;
}
A 4
B 5
C 6
D 7
D
开始不知道啥意思,后经牛客网的大神指点才知道这题要考虑的是,x,y,z三个参数是否指向同一地址(或者说调用该函数时是否实参相同),如:当a=b=c=1时,add(&a,&a,&a),add(&a,&b,&c)。
通过写程序测试得出结果,不可能得到答案7。
体育课的铃声响了,同学们都陆续地奔向操场,按老师的要求从高到矮站成一排。每个同学按顺序来到操场时,都从排尾走向排头,找到第一个比自己高的同学,并站到他的后面,这种站队的方法类似下列哪种算法?
A 快速排序
B 插入排序
C 冒泡排序
D 归并排序
B
下面关于inode描述错误的是?
A inode和文件是一一对应的
B inode能描述文件占用的块数
C inode描述了文件大小和指向数据块的指针
D 通过inode实现文件的逻辑结构和物理结构的转换
A
设有一个栈,元素依次进栈的顺序是A,B,C,D,E。下列不可能的出栈顺序有?
A ABCDE
B BCDEA
C EABCD
D EDCBA
C
进一个出一个的序列为A
AB进栈B出栈C进栈出栈D进栈出栈E进栈出栈A出栈的序列为B
全部进栈再出栈的序列为D,栈为先进后出的数据结构,无论如何都不会出现C的情况,故选C
某二叉树结点的中序序列为A、B、C、D、E、F、G、H,后序序列为B、D、C、A、F、G、H、E。该二叉树对应的树林结点的层次次序序列为?
A E、G、H、F、A、C、D、B
B E、A、H、C、G、B、D、F
C E、A、G、H、C、F、B、D
D E、G、A、C、H、D、F、B
B
由后序序列知E为根节点,再由中序遍历知左子树为ABCD,右子树为FGH
由后序遍历BDCA知,A为BDC父节点,BDC为右子树,其中C为BD父节点,B为C的左孩子,D为C右孩子,该树左半部分完成
由中序序列和后序序列知FGH序列不变,则H的左孩子为G,G的左孩子为F,H为E的右孩子,该树可知其层次次序序列为EAHCGBDF,故选B
假设平均每个人人用户有300个好友,则一个人人用户的3跳好友数的数量级是?
A 十万级
B 百万级
C 千万级
D 亿级
C
300的3次方,27000000,如果包含相互好友、共同好友的话还会比这个少。
下列哪些因素不会限制Linux服务器并发连接数?
A 系统内存大小
B 系统网卡数量
C 系统最大文件句柄数量
D 系统IP地址数量
B
网卡数量。选择B
第一个,就是ip地址数,系统ip数越多,建立连接数越多。
第二个,内存。从配置文件角度说吧
用vim打开配置文件:#vim /etc/sysctl.conf
net.ipv4.tcp_mem[0]:低于此值,TCP没有内存压力。
net.ipv4.tcp_mem[1]:在此值下,进入内存压力阶段。
net.ipv4.tcp_mem[2]:高于此值,TCP拒绝分配socket。
上述内存单位是页,而不是字节。内存大小影响网络
第三个。其他,句柄最大数影响network 在vfs操作的上限。
最后。这么高大上的问题,我们先来看一个故事吧:
100万并发连接服务器笔记之Erlang完成1M并发连接目标
100万并发连接服务器笔记之1M并发连接目标达成
100万并发连接服务器笔记之测试端就绪
100万并发连接服务器笔记之处理端口数量受限问题
100万并发连接服务器笔记之准备篇
二、填空题
在区间[-1, 1]随意取两个数,它们的和大于1的概率是_________。(分数表示)
1/8
n从1开始,每个操作可以对n加1或加倍,如果要使n是2014,最少需要________ 个操作。
18
int minimum_step(int n) {
vector<int> dp(n + 1);
dp[1] = 0;
for (int i = 2; i <= 2014; i++) {
dp[i] = dp[i - 1] + 1;
if (i % 2 == 0) {
dp[i] = min(dp[i], dp[i / 2] + 1);
}
}
return dp[2014];
}
三、问答题
给出二叉树接口为
class node
{
node *get_left();
node *get_right();
int get_data();
}
找出值为val的最浅节点所在层数。
int find(node *root, int val).
int find(node * root, int val) {
int ret = 1;
if (root->get_data() == val) {
return ret;
} else {
int ret1 = 1 + find(root->get_left(), val);
int ret2 = 1 + find(root->get_right(), val);
if (ret1 > ret2)
ret = ret2;
else
ret = ret1;
return ret;
}
}
计算机中处理乘法的指令要比加法复杂的多, 因为在一些关键系统中我们常常会考虑如何尽可能减少乘法的运算。
现在有如下的表达式
y= anxn+an-1xn-1 +…..+a1x +a0
其中an, an-1, ….a1, a0是常数, 给一个x, 要求尽快算出y的值。请尝试写出这样的一个函数。
思路:
F0=an;
F1=anx+an-1
Fn=xF(n-1)+an-1
代码:
function sum(int a[], int n, int x){
s=a[n]
for(int i=1; i<=n; i++){
s += x*s + a[n-i]
}
return s;
}