ブルーブリッジカップ:インクリメンタルトリプル(よく間違える)

トピック

[問題の説明]
   シーケンスa [1]、a [2]、…、a [n]で、添え字i、j、kが0 <i <j <k <n +1およびa [i]を満たす場合<a [j] <a [k]の場合、a [i]、a [j]、a [k]は増加するトリプルのセットであり、a [j]は増加するトリプルの中心です。
一連の番号が与えられると、シーケンス内の要素の数が増加するトリプルの中心になる可能性があります。
【入力形式】入力
   の1行目に整数nが含まれています。
2行目には、n個の整数a [1]、a [2]、…、a [n]が含まれています。隣接する整数は、特定の番号のシーケンスを示すためにスペースで区切られています。
【出力形式】
   出力行には、回答を示す整数が含まれています。
[サンプル入力]
5
1 2 5 3 5
[サンプル出力]
   2
[サンプルの説明]
   a [2]とa [4]はトリプルの中心である可能性があります。
[評価ユースケースのスケールと規則]評価ユースケースの
   50%について、2 <= n <= 100、0 <=シーケンス内の数<= 1000。
   すべての評価ケースで、2 <= n <= 1000、0 <=シリーズの数<= 10000。

間違いを犯す

  トリプルの中心は2回計算されます

解決

   修飾されたa [j]を再割り当てします。割り当てられた値は、2回計算されないように、0より大きくすることはできません。

コード

import java.util.Scanner;

public class Main {
    
    
    public static void main(String[] args) {
    
    
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();//输入整数n
        int arr[] = new int[n];
        int count=0;
        for(int i=0;i<n;i++){
    
     //输入n个数
            arr[i]=scanner.nextInt();
        }
        for(int k=0;k<n;k++){
    
    
            for(int j=0;j<k;j++){
    
    
                for(int i=0;i<j;i++){
    
    
                    if(arr[i]<arr[j]&&arr[j]<arr[k]){
    
     //条件判断,将符合条件的a[j]赋值为-1(题目有要求数列中的数大于0,所以将符合条件的a[j]赋值为-1,-2,-3都行),防止二次计算
                        arr[j]=-1;
                        count++;
                    }
                }
            }
        }
        System.out.println(count);
    }
}




おすすめ

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