阿里巴巴集團2015秋季校園招聘筆試題

今年阿里全面進行網上筆試,我投的是測試開發工程師,據我所知,大家的題目還是不盡相同

答題說明: 本試卷共分爲兩部分。第一部分爲單選題,時長40分鐘,第二部分爲附加題,時長80分鐘,答題時間總計120分鐘。你可在答題開放時間內前來答題,答題一旦開始計時開始,中途不可暫停,請合理安排時間。

第一部分的題目沒有記,大概考點有操作系統(LRU算法),計算機網絡,循環鏈表插入,概率論,正則表達式匹配,邏輯推斷(竟然有好幾題),還有一題問fork()||fork()共創建多少進程,對linux編程不甚瞭解,求高人解答

下面是第二部分的三題:

第一題:


第二題:

寫一個函數,輸入一個二叉樹,樹中每個節點存放了一個整數值,函數返回這棵二叉樹中相差最大的兩個節點間的差值絕對值。請注意程序效率。


 struct BinTree
{
    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);
}

第三題:
給定一個query和一個txt,均由小寫字母組成。要求在text中找出以同樣順序連續出現在query中的最長連續字母序列的長度。例如,query爲“abcac”,text爲“acaccbabb”,那麼text中的“cba”爲最長的連續出現在query中的字母序列,因此,返回結果應該爲其長度3。請注意程序效率。


#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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章