创新工场笔试题

1.树的子结构问题,参照《剑指offer》上面试题18.

bool DoseTree1HaveTree2(BinaryTreeNode *pRoot1, BinaryTreeNode *pRoot2)

{

    if(pRoot2 == NULL)

        return true;

    if(pRoot1 == NULL)

        return false;

    if(pRoot1->m_nValue != pRoot2->m_nValue)

        return false;

    return DoseTree1HaveTree2(pRoot1->m_pLeft, pRoot2->m_pLeft) && DoseTree1HaveTree2(pRoot1->m_pRight, pRoot2->m_pRight);

}



bool HasSubTree(BinaryTreeNode *pRoot1, BinaryTreeNode *pRoot2)

{

    bool result = false;

    if(pRoot1 != NULL && pRoot1 != NULL)

    {

        result = DoesTree1HaveTree2(pRoot1, pRoot2);

        if(!result)

            result = HasSubTree(pRoot1->m_pLeft, pRoot2);

        if(!result)

            result = HasSubTree(pRoot1->m_pRight, pRoot2);

    }

    return result;

}

2.翻转字符串;

void reverse(string s)

{

    int n = s.size();

    int i = 0, j = n-1;

    while(i <= j)

    {

        swap(s[i], s[j]);

        i++;

        j--;

    }

}

3.加油站问题,参见leetcode题目Gas Station

int canCompleteCircuit(vector<int> &gas, vector<int> &cost) {

    int n=gas.size();

    if(n==0)

        return -1;

    int sum=0;

    int dif=0;

    int result=0;

    for(int i=0;i<n;i++)

    {

        sum+=gas[i]-cost[i];

        dif+=gas[i]-cost[i];

        if(sum<0)

        {

            result=(i+1)%n;

            sum=0;

        }

    }

    if(dif<0)

        return -1;

    return result;

}

 

你可能感兴趣的:(笔试题)