切換
舊版
前往
大廳
主題

ZeroJudge - c435: MAX ! MAX ! MAX ! 解題心得

Not In My Back Yard | 2018-10-05 17:13:10 | 巴幣 0 | 人氣 311

題目連結:


題目大意:

給定N(2 ≦ N ≦ 100, 000),以及N個數字(皆介於1 ~ 100, 000)。

現在有一任務:找到i、j(i < j),使得第i個數字-第j個數字(由左至右開始編號)的結果最大。

求最大的結果為何?

範例輸入:
5 4 3 2 1

範例輸出:
4 (第1個數字-第5個數字的結果最大)



解題思維:

因為時間限制0.2秒,且N又可以大到100, 000。若是用迴圈窮舉所有i、j的組合,時間複雜度O(N ^ 2),會超時。

一開始先讀入一個N值,代表接下來有N個數字。再來先讀入第一個數字,當作目前數列所找的「最大值」。並設立一變數儲存目前「最大的差值」。

剩下的N-1個數字,每讀入一個數字,判斷是否大於目前的「最大值」。如果大於,則把「最大值」替換成當前讀入的值。

反之,把「最大值」減去目前讀到的值,判斷是否大於目前「最大的差值」。如果是的話,就把「最大的差值」更新成新的差值。

這樣便可以確保i < j,而第i個數字又盡量地大了。

等到輸入一結束,儲存「最大的差值」的變數即是答案。時間複雜度為O(N)。



此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作