兩道編程題。
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