在程式設計評測中,遇到 Memory Limit Exceeded 通常表示程式佔用的記憶體超過題目限制。針對「讀取單詞、排序後去重輸出」這類題目,可從以下方面優化。
常見原因
- 一次性將所有單詞儲存在記憶體中,且單詞數量或長度較大。
- 使用字串物件開銷高,重複儲存相同單詞。
- 未釋放不需要的資料結構。
優化建議
- 使用集合(如 std::set)自動去重,避免重複儲存。
- 若資料量極大,考慮外部排序或分塊處理,不要一次載入全部資料。
- 將大型陣列或容器宣告為全域變數,有時可減少堆疊開銷,但根本解法仍在於減少資料量。
- 針對 C++,可使用 std::priority_queue 或 std::set 依序輸出,減少額外排序陣列。
最重要的是分析題目資料規模,選擇適合的資料結構,避免不必要的記憶體複製與保留。