今年阿里全面进行网上笔试,我投的是测试开发工程师,据我所知,大家的题目还是不尽相同
答题说明: 本试卷共分为两部分。第一部分为单选题,时长40分钟,第二部分为附加题,时长80分钟,答题时间总计120分钟。你可在答题开放时间内前来答题,答题一旦开始计时开始,中途不可暂停,请合理安排时间。
第一部分的题目没有记,大概考点有操作系统(LRU算法),计算机网络,循环链表插入,概率论,正则表达式匹配,逻辑推断(竟然有好几题),还有一题问fork()||fork()共创建多少进程,对linux编程不甚了解,求高人解答
下面是第二部分的三题:
第一题:
第二题:
写一个函数,输入一个二叉树,树中每个节点存放了一个整数值,函数返回这棵二叉树中相差最大的两个节点间的差值绝对值。请注意程序效率。
{
int data;
BinTree *left;
BinTree *right;
BinTree(int x) : data(x), left(NULL), right(NULL) { }
};
int maxDiffNum(BinTree *root)
{
if (root == NULL) return 0;
stack<BinTree*> s;
BinTree *p=root;
int min=INT_MIN,max=INT_MAX;
while(p!=NULL||!s.empty())
{
while(p!=NULL)
{
if(p->data > max) max = p->data;
if(p->data < min) min = p->data;
s.push(p);
p=p->left;
}
if(!s.empty())
{
p=s.top();
s.pop();
p=p->right;
}
}
return abs(max-min);
}
#include <iostream>
#include <string>
#define ARRAY_X 20
#define ARRAY_Y 20
using namespace std;
int longestCommonSubsequence(string text, string query)
{
int max_length = 0;
int query_length = query.length();
int text_length = text.length();
int c[ARRAY_X][ARRAY_Y];
for (int i = 1; i < text_length + 1; i++)
{
c[i][0] = 0;
}
for (int i = text_length; i > 0; i--)
{
text[i] = text[i - 1];
}
for (int j = query_length; j > 0; j--)
{
query[j] = query[j - 1];
}
for (int j = 0; j < query_length + 1; j++)
{
c[0][j] = 0;
}
for (int i = 1; i < text_length + 1; i++)
{
for (int j = 1; j < query_length + 1; j++)
{
if (text[i] == query[j])
{
c[i][j] = c[i - 1][j - 1] + 1;
if (c[i][j] >= max_length)
{
max_length = c[i][j];
}
}
else
{
c[i][j] = 0;
}
}
}
return max_length;
}
int main()
{
string text;
string query;
cin >> text;
cin >> query;
cout << longestCommonSubsequence(text, query) << endl;
return 0;
}