今年阿里全面進行網上筆試,我投的是測試開發工程師,據我所知,大家的題目還是不盡相同
答題說明: 本試卷共分爲兩部分。第一部分爲單選題,時長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;
}