阿里20/5/25校招筆試題

兩道編程題。

1

一串size爲N的數列,代表一條直線上書店的位置。
一個數字M,代表主角想要到去的書店到數量。
返回兩個書店之間最小值到最大值。
例子,N = 5,{1 2 4 8 9}, M = 3,返回3,當主角選擇1 4 9三個書店到時候,這個距離爲3.

這題一開始寫了NM^2, 超時對了20%, 蒙了,然後改了改NM,30%.後來想想N*logM應該可以但是當時應該沒時間寫,不知道是不是最後結果。我的想法就dp,沒想到線性的。

2

對於一個字符串所有從0開始的子序列,判斷在整個數組中出現次數。不考慮重複,比如在數列“aaaaa”中,“aa”出現兩次。
例子,輸入“abab”,子數列有"a"“ab”“aba”“abab”,共出現2+2+1+1=6次

這個反而我覺得不可能過結果一交過了……

代碼塊大概長這樣

int result = 0;
for (int i = 0; i < s.size(); i++)
{
	for(int j = 0; j + i < s.size(); j++)
	{
		if(s[j] == s[j+i]) result++;
	}
}

這個方法我想了一下應該是有問題的……因爲這樣算的話在“aaaaa”中“aa”應該出現了四次……不知道是不是給的樣例沒有測到這種情況orz

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