記得 ans = max( a[ i ] - a[ j ] | i < j ),也就是說,如果只是單純的把數列中的「最大數」與「最小數」存起來,會錯測資#1跟測資#3,因為找到的「最大數」不一定在「最小數」的前面 ( i 必須小於 j )。要避免這種情形,可以在更新「最大數」的變數時,同時更新「最小數」,並且把之前「最大數減最小數」的紀錄存起來,跟之後產生的「最大數減最小數」做比較。要注意的是,如果紀錄比較大,就不用改他。
這是一個解題的思路,或許還有別的。
@可以由此程式碼進行更改
「錯誤」的程式碼 (單純的把數列中的「最大數」與「最小數」存起來):
#include <bits/stdc++.h>
using namespace std;
int main () {
long long int n, min, max, k;
cin >> n;
cin >> k;
min = k, max = k;
n -= 1;
while (n--) {
cin >> k;
if (min > k) {
min = k;
}
if (max < k) {
max = k;
}
}
cout << max - min << '\n';
}