【题解提供者】吴立强
解法
思路
暴力遍历前 i i i 个数时间复杂度为 O ( n 2 ) O(n^2) O(n2) 会超时。
记第 i i i 个答案为 a n s i ans_i ansi,观察到有: a n s i = max { a 1 , a 2 , . . . , a i } = max { max { a 1 , a 2 , . . . , a i − 1 } , a i } = max { a n s i − 1 , a i } ans_i=\max\{a_1, a_2,...,a_i\}=\max\{\max\{a_1,a_2,...,a_{i-1}\},a_i\}=\max\{ans_{i-1},a_i\} ansi=max{a1,a2,...,ai}=max{max{a1,a2,...,ai−1},ai}=max{ansi−1,ai}。
故递推求解即可。
代码
#include <iostream>
using namespace std;
int main() {
int n; cin >> n;
int mx = -1e9; /// 比可能出现的最小值(-1e6)还小
while(n --) { /// 重复 n 次
int x; cin >> x;
mx = max(mx, x); /// 递推求最小值
cout << mx << ' ';
}
return 0;
}
算法分析
本算法的时间复杂度为 O ( n ) O(n) O(n)。