兩個有序序列的中位數

2021-09-20 12:52:46 字數 1409 閱讀 2631

7-1 兩個有序序列的中位數 (30 分)

已知有兩個非降序序列s1, s2, 求s1與s2歸併成乙個序列的低位中位數。有序序列a0,a1,⋯,an−1的中位數指a(n−1)/2的值,即第⌊(n+1)/2⌋個數(a0為第1個數)。

輸入格式:

輸入分4行。第一行給出第乙個序列的長度n1(0輸出格式:

在一行中輸出兩個輸入序列的並集序列的低位中位數。

輸入樣例

在這裡給出一組輸入。例如:

3

1 2 3

54 5 6 7 8

輸出樣例:

4
要求:記憶體占用少於24mb,時間少於700ms

關鍵在與時間少於700ms

要實現這一點,很直接的排序然後輸出

那麼用上前面學過的鍊錶如何

#include

#include

typedef

struct lnode

lnode,

*linklist;

linklist createlist_l

(int n)

return l;}

linklist mergelist

(linklist s1, linklist s2)

else

while

(p1&&p2)

else

} p3->next = p1 ? p1 : p2;

return s3;

}int

searchlist

(linklist s3,

int num)

return pt->data;

}int

main()

好像很厲害,其實記憶體占用超了不知道多少,這麼多函式時間也肯定超了。

那麼簡單一點

#include

#include

#include

using namespace std;

intmain()

然後還很小心地使用了++i而不是i++,一執行就超時了。

試驗之後發現光是輸入就占用了至少400-500ms,取決於資料,再來個排序,時間必然是會超過的。

痛定思痛,其實不用全部排出來,只要排到中間的數就行了,那麼就有了下面的**

#include

int main (

)else

}else

if(na>=n1)

else

}printf

("%d"

,resu)

;return0;

}

問題解決。可以愉快玩耍了。

兩個有序序列的中位數

5 7 兩個有序序列的中位數 25分 已知有兩個等長的非降序序列s1,s2,設計函式求s1與s2並集的中位數。有序序列a0,a1,an 1a 0,a 1,cdots,a a 0 a 1 a n 1 的中位數指a n 1 2a a n 1 2 的值,即第 n 1 2 lfloor n 1 2 rflo...

兩個有序序列的中位數

問題 已知有兩個等長的非降序序列s1,s2,設計函式求s1與s2並集的中位數。有序序列a 0 a 1 a n 1 的中位數指a n 1 2 的值,即第 n 1 2 個數 a 0 為第1個數 演算法描述 輸入兩個長度自定且等長的陣列,然後對他們進行賦值。演算法的思路是分別取他們的中位數進行比較,假設兩...

兩個有序序列的中位數

已知有兩個等長的非降序序列s1,s2,設計函式求s1與s2並集的中位數。有序序列a 0 a 1 a n 1 的中位數指a n 1 2 的值,即第 n 1 2 個數 a 0 為第1個數 輸入分三行。第一行給出序列的公共長度n 0在一行中輸出兩個輸入序列的並集序列的中位數。5 1 3 5 7 9 2 3...