答案為自己整理的,歡迎批評指正。
公共題
選擇題(每題5分)
1. 若一棵二叉樹具有10個度為2的結點,則該二叉樹的度為0的結點個數是( )
a:9 b
:11 c:12 d:不確定
2.下列排序演算法中,其時間複雜度和記錄的初始排列無關的是( )
a:插入排序 (預先排序,執行時間為o(n)) b:堆排序 c:快速排序 (最壞情形o(n2)) d:氣泡排序 (最壞情形o(n2), 最優o(n))
3.已知中序遍歷的序列為abcdef,高度最小的可能的二叉樹的葉子是( )a:
ace b:
acf c:
adf d:cdf
4.參加百年阿里培訓的n位同學結伴去西湖旁邊為遊人指路,兩人一組,他們打算先讓體重之和恰好為102公斤的同學一組,請給出乙個演算法找到這樣的組合,或者確定他們中不存在這樣的組合,其中最優的演算法時間複雜度為?(假設體重均為整數) ( )
a:o(log(n)) b:o(n) c:o(n log(n)) d:o(n^2)
5.眾所周知資料結構中非常基本的樹結構包括二叉查詢樹(bst)。當我們把如下序列:10,5,19,4,13,7,6,3,1按順序建立一棵bst時,樹的最大深度是?(令根節點深度為0,執行不進行平衡的基本插入) ( )
a:5 b
:4 c:3 d:2
6.阿里巴巴啟用了新的辦公大廈,這裡的一切都充滿了現代感;工程師們打算在娛樂區用大小相等的圓形材料分割出一些空間,使用a,b,c三個圓形材料,最多可以將空間分為八個區域(包括圓形以外的區域),如果給你五個圓形材料,你最多可以幫助工程師們分出多少個空間? ( )
a:20 b:22 c:26d:32
綜合題(每題15分)
1) 分析mergesort的原理以及演算法複雜度,並用最擅長的程式語言實現merge sort。
mergesort利用分治法的原理,依次減小問題的規模。時間複雜度為o(nlog(n)), 空間複雜度為o(n);
[cpp]view plain
copy
void
mergesort(
int*p,
intn)
void
msort(
int*p,
int*temp,
intleft,
intright)
} void
merge(
int*p,
int*temp,
intleft,
intrightbegin,
intright)
else
if(p[left] > p[rightbegin])
} while
(left < temparray)
temp[pos++] = p[left++];
while
(rightbegin <= right)
temp[pos++] = p[rightbegin++];
while
(pos-- >= begin)
} 給定乙個數t,
以及n個整數,在這
n個數中找到加和為
t的所有組合,
例如t = 4, n = 6,這6
個數為[4, 3, 2, 2, 1, 1],
這樣輸出就有
4個不同的組合它們的加和為
4: 4, 3+1, 2+2, and 2+1+1.
請設計乙個高效演算法實現這個需求。
[cpp]view plain
copy
#include
#include
using
namespace
std;
void
find(
int*p,
intn,
intsum);
void
qsort(
int*p,
intn);
intmain()
void
find(
int*p,
intn,
intsum)
void
findsum(
int*p,
intn,
intsum, vector<
int> &vec)
if(sum < *p || n < 0)
vec.push_back(*p);
sum -= *p;
findsum(p+1, n-1, sum, vec);
sum += *p;
vec.pop_back();
while
(*p == *(p+1) && n>0)
//跳過重複的數字
findsum(p+1, n-1, sum, vec);
} void
qsort(
int*p,
intn)
} } swap(p+j+1, p+n-1);
qsort(p, j+1);
qsort(p+j+2, n-j-2);
} void
swap(
int*a,
int*b)
熱點題聊聊近期最吸引你的網際網路事件,談談你對此事件的看法。
c&c++部分
選擇題(每題5分)
1、int main(void)
printf("%d\n",count); return0;
}請問最終輸出的count值為( )a:3b:4c
:5d:8
2、在32位作業系統中,我們定義如下變數
int (*n)[10];
請問呼叫函式sizeof(n),返回值為( )a
:4b:40c:8d:80
3、int main(void)
請問最終輸出的i值為( )a:2b
:3c:4d:5
4、以下敘述中正確的是( )
a:可以在乙個函式中定義另乙個函式b:main()函式必須放在其他函式之前
c
:構成c++語言程式的基本單位是類d:所有被呼叫的函式一定要在呼叫之前進行定義
綜合題(每題15分)
有10億個數,這些數的值都在0~1000萬之內。請使用定義乙個資料結構實現這些數字的儲存,並實現函式get_bigger_count( unsigned value ),輸入乙個值value,返回這10億個數中比value值大的數的數目。
要求:不能使用stl,請盡量考慮效能與資源的占用。
思路:建立乙個包含1000萬個元素的陣列,然後遍歷10億個數字,陣列用來統計對應數字出現的次數。
如果10億個數字中0~1000萬是隨機出現的,可以滿足需求。如果有乙個數字出現的次數非常的,則陣列可能溢位。
**:
2011阿里巴巴集團實習生招聘筆試題 C C
公共題 選擇題 每題5分 1.若一棵二叉樹具有10個度為2的結點,則該二叉樹的度為0的結點個數是 a 9 b 11 c 12 d 不確定 2.下列排序演算法中,其時間複雜度和記錄的初始排列無關的是 a 插入排序 預先排序,執行時間為o n b 堆排序 c 快速排序 最壞情形o n2 d 氣泡排序 最...
阿里巴巴實習生 招聘內推
我們是阿里國際化中臺事業部,全球化是阿里巴巴經濟體的核心戰略之一,也是阿里商業作業系統的重要組成部分。在阿里有很多的國際化戰場,包括東南亞電商lazada,以及全球賣的速賣通aliexpress,同時還有daraz等眾多電商市場。未來通過中颱的能力建設,幫助業務和業務之間更好的互通,實現技術研發的網...
阿里巴巴2011屆實習生招聘筆試題及分析
完整試題 參考 下面的 分析 是我給出的。選擇題 每題5 分 1.若一棵二叉樹具有 10個度為 2的結點,則該二叉樹的度為 0的結點個數是 a 9 b 11c 12 d 不確定 2.下列排序演算法中,其時間複雜度和記錄的初始排列無關的是 a 插入排序 b 堆排序 c 快速排序 d 氣泡排序 3.已知...