炎熱的夏日,KC非常的不爽。他寧可忍受北極的寒冷,也不願忍受廈門的夏天。最近,他開始研究天氣的變化。他希望用研究的結果預測未來的天氣。
經歷千辛萬苦,他收集了連續N(1<=N<=10^7)天的最高氣溫數據。
現在,他想知道最高氣溫一直上升的最長連續天數。
輸入格式:
第1行:一個整數N。1<=N<=10^7
第2行:N個空格隔開的整數,表示連續N天的最高氣溫。0<=最高氣溫<=10^9。
輸出格式:
第1行:一個整數,表示最高氣溫一直上升的最長連續天數。
輸入:
10
1 2 3 2 4 5 6 8 5 9
輸出:
5
var
i,j,n,max,counter:longint;
a:array[1..10000000] of longint;
begin
assign(input,'in.txt');
reset(input);
readln(n);
for i:=1 to n do read(a[i]);
max:=0;
for i:=1 to n do
begin
counter:=1;
for j:=i to n do
begin
if a[j]>=a[j+1] then
begin
break;
end
else
begin
counter:=counter+1;
end;
end;
if counter>max then max:=counter;
end;
writeln(max);
end.
以上代碼雖然易懂,但是有個很嚴重的超時問題,我們使用了二重循環,使得算法複雜度在O(n^2)。
以下算法將複雜度降到O(n)
var
i,n,max,counter:longint;
a:array[1..10000000] of longint;
begin
assign(input,'in.txt');
reset(input);
readln(n);
for i:=1 to n do read(a[i]);
max:=0;
counter:=1;
for i:=1 to n do
begin
if a[i+1]>a[i] then
begin
counter:=counter+1;
end
else
begin
counter:=1;
end;
if counter>max then max:=counter;
end;
writeln(max);
end.