トピック
[問題の説明]
シーケンスa [1]、a [2]、…、a [n]で、a [i] <a [i + 1] <a [i + 2] <…<a [j]の場合、次に、長さj-i +1の増加シーケンスとしてa [i]からa [j]を呼び出します。
番号のシーケンスが与えられた場合、シーケンス内で最も長く増加するシーケンスの長さはどれくらいですか。
【入力形式】入力
の1行目に整数nが含まれています。
2行目には、n個の整数a [1]、a [2]、…、a [n]が含まれています。隣接する整数は、特定の番号のシーケンスを示すためにスペースで区切られています。
【出力形式】
出力行には、回答を表す整数が含まれています。
[サンプル入力]
7
5 2 4 1 3 7 2
[サンプル出力]
3
[評価ユースケースのスケールと規則]
評価ユースケースの50%について、2 <= n <= 100、0 <=シーケンス内の数<= 1000。
すべての評価ケースで、2 <= n <= 1000、0 <=シリーズの数<= 10000。
ヒント
インクリメントシーケンスの長さは、0ではなく1に初期化する必要があります。長さを0に初期化する場合は、最終出力を出力するときに長さ+1を忘れないでください。
問題解決のアイデア
タイプintの2つの数を定義します。1つは増加するシーケンスの長さであり、もう1つは増加するシーケンスの最長の長さです。後者の項目が前の項目よりも大きい場合、長さは+1です。長さが最長の長さよりも大きい場合、長さは最長の長さに割り当てられます。後者の項目が前の項目よりも小さい場合、長さは再初期化されます。
コード
import java.util.Scanner;
public class Main {
//蓝桥杯要求class命名为Main,且无package
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int arr[]=new int[n+1];
int length=1;//递增序列的长度,初始化为1
int max=0;//最长的递增序列长度
for(int i=1;i<n+1;i++){
arr[i] = scanner.nextInt();
}
for(int i=1;i<n;i++){
if(arr[i+1]>arr[i]){
length++;//后一项大于前一项+1
if(length>max){
max=length;
}
}else{
length=1;//长度初始化
}
}
System.out.println(max);
}
}