2015阿里巴巴秋招在線筆試題

1.淘寶網(www.taobao.com)與阿里巴巴網(www.alibaba.com)是阿里巴巴集團下的兩個獨立站點,若是淘寶網天天的獨立訪客數在億以上(以IP計),阿里巴巴網天天的獨立訪客數在千萬以上(以IP計)。這兩個站點有各自的瀏覽日誌。記錄了訪客在本站點上的瀏覽記錄。如IP、訪問時間、訪問頁面的URL等(注:一個IP在某天可能訪問多個頁面);現有這兩個站點某天的瀏覽日誌文件各一份。要計算在該天既訪問過淘寶網又訪問過阿里巴巴站點的獨立訪客數大約是多少。請給出你能想到的方案(可多個)。算法

關於海量數據處理問題。July在這篇博文進行很是好的總結:http://blog.csdn.net/v_july_v/article/details/6279498數組

而這個問題相似上面網址提到第五個問題。數據結構

 

2.給定一個query和一個text,均由小寫字母組成。函數

要求在text中找出以相同的順序連續出現在query中的最長連續字母序列的長度。優化

好比, query爲「acbac」,text爲「acaccbabb」。那麼text中的「cba」爲最長的連續出現在query中的字母序列,所以,返回結果應該爲其長度3。請注意程序效率。spa

這道題目最簡單的實現就是進行動態規劃。.net

算法思想:日誌

求字符串str1,str2的最長公共子串的長度。 
定義二元函數函數f(m,n):分別以str1[m],str2[n]結尾的連續公共子串的長度 
而對於f(m+1,n+1) 有下面兩種狀況 
1.str1[m+1] != str2[n+1],則有f(m+1,n+1) =0
2.str1[m+1] == str2[n+1],則有f(m+1,n+1) = f(m,n) + 1 
另外f(0,j) = 0(j>=0)    f(j,0) = 0 (j>=0) 時間複雜度爲 O(M*N) M,N爲兩個字符串長度。
上述是基本實現算法。假設想進行優化可以利用 後綴樹數據結構:時間複雜度O(M+N) http://blog.csdn.net/nomad2/article/details/6404196

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


數據結構定義:blog

typedef struct BSTreeNode{
	int num;
	BSTreeNode* leftChild;
	BSTreeNode* rightChild;

}*TreeNode;


個人思路是:非遞歸的中序遍歷樹,記錄最大最小值,返回兩個節點間最大差值。

//非遞歸的中序遍歷,經過遍歷數組。用Max記錄最大值,用Min記錄最小值,求得二者差值
void inorderTraverse(TreeNode root)
{

	stack<TreeNode>sta;
	TreeNode p=root;
	int Max = -2147483648 ;
	int Min = 2147483647;
	while (p||sta.size())
	{
		if (p)
		{
			sta.push(p);
			p=p->leftChild;
		}
		else
		{
			p=sta.top();
			// 更新最大最小值
			if(p->num>Max){
				Max = p->num;
			}
			if(p->num<Min){
				Min = p->num;
			}
			cout<<p->num<<" ";
			sta.pop();
			p=p->rightChild;
		}
	}
	cout<<"輸出相差最大兩個結點差值:"<<Max-Min<<endl;
}


歡迎你們提供上面題目的思路,感謝!微笑

相關文章
相關標籤/搜索