ブルーブリッジカップ:最長の増分(詳細な分析)

トピック

[問題の説明]
   シーケンス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);
    }
}




おすすめ

転載: blog.csdn.net/qq_47168235/article/details/108917285