#39286: C++ array &STL解題注意事項


n12603579table@gmail.com (施智皓)

學校 : 不指定學校
編號 : 145648
來源 : [36.234.171.196]
最後登入時間 :
2024-04-04 21:19:31
d097. 10038 - Jolly Jumpers -- UVa10038 | From: [114.26.130.139] | 發表日期 : 2024-02-01 14:35

開門見山 : 讀取時記下上一個和現在的輸入值,計算"差"之後再放入陣列(動態or靜態)裡面,將陣列排列後寫一個for loop逐一核對有無滿足序列 1,2,3,4,...,n-1。

1.

這題使用set標頭檔的話,可以用for迴圈將前後項的差值一個一個insert進去。

因為C++的set裡面是由紅黑樹實作的,這個過程需要O(log n)時間複雜度,

但插入之後會自動幫你由小排到大,不需要額外呼叫sort的函式庫。

2.

使用靜態陣列的話要注意記憶體管理的問題(該new就new,該delete就delete),當n很大時容易 RE 。

3.

跟2.的情形有一點類似。使用vector標頭檔的話,依我嘗試後的心得,不建議先初始化為vector<int>v(n,0),此舉會占用記憶體空間。

可以在讀取數字進來的時候,計算前後項差值,再用push_back推進去v裡面,時間複雜度O(1)

讀取完之後,再用sort將數列由小排到大即可,平均而言時間複雜度O(n log n)

 

時間複雜度方面set和vector都是O(n log n),整體而言我個人覺得set最方便debug,有什麼更好的寫法也歡迎討論。

 
ZeroJudge Forum