題目連結:
題目大意:
給定N(2 ≦ N ≦ 100, 000),以及N個數字(皆介於1 ~ 100, 000)。
現在有一任務:找到i、j(i < j),使得第i個數字-第j個數字(由左至右開始編號)的結果最大。
求最大的結果為何?
範例輸入:
5
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)。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。