白駿2846号::上り坂(Java)


問題の説明
白駿2846号:上り坂(Bronze 2)
尚根は自転車で学校に通っている.自転車道は上り坂、下り坂、平地からなる.尚根さんは学校が始まる初日に自転車に乗った時、一定距離おきに高さを測った.尚根は最大の上り坂の大きさを求めたい.
測定した高さは長さNの数列で表すことができる.ここで、上り坂は少なくとも2つの河川からなる高さが増加した部分数列である.上り坂の大きさは、部分数列の最初の数字と最後の数字の違いです.
たとえば、道路の高さを次のように仮定します.12 3 5 7 10 6 1 11. この道には上り坂が2本ある.下線で表示される部分の数列は上り坂です.1本目の上り坂の大きさは7、2本目の上り坂の大きさは10です.高さ12と6のところは上り坂ではありません.
最大の上り坂を求めるプログラムを作成してください.
入力
第1行は、前根で測定した高さ数と数列の大きさN(1≦N≦1000)を与える.2行目には、N個の正の整数Pi(1≦Pi≦1000)が与えられる.各数字は上根で測定した高さです.
しゅつりょく
最初の行は最大上り坂のサイズを出力します.上り坂がなければ0を出力します.
問題を解く
  • 上り坂は高さが増えた部分数列なので、現在の高さと以前の高さを比較します.
  • 上り坂であれば、現在位置を最後の数字として上り坂の大きさを求め、最高値を更新します.
  • 上り坂でない場合は、一部の数列の最初の数字を現在の位置に保存します.
  • N個の数字を確認した後,解を求める「最大上り坂の大きさ」を出力する.
  • ソースコード
    ソースリンク
    public static void main(String[] args) throws NumberFormatException, IOException {
    	BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    	int N = Integer.parseInt(in.readLine());
    	StringTokenizer st = new StringTokenizer(in.readLine(), " ");
    	int num = Integer.parseInt(st.nextToken());
    	int max = 0, first = num, prev = 0;
    	for (int i = 1; i < N; i++) {
    		num = Integer.parseInt(st.nextToken());
    		// 오르막길이 이어지면 크기 갱신
    		if (prev < num) {
    			max = Math.max(max, num-first);
    		} else { // 새로운 오르막길 시작
    			first = num;
    		}
    		prev = num;
    	}
    	System.out.println(max);
    }
    に感銘を与える
    ブロンズの問題なのでアップロードするかどうか悩んでいますが入出力ではありません...置いても意味がないわけではないと思います問題を解くのは少し冗長だ(?)それは接着剤でもコードのすべてです.解題方法を整理して使うのが一般的ですが、整理しても何もすることはありません.
    どうせ簡単な問題だから、すぐに解決した.上り坂を見つければいいので、入力を受けながらすぐに最価値を得る~~~もっと簡単な方法もありますが、私が一目で分かるのも大切な人です.🧐 および実行時間が適切です...妥協...試験の準備のためにやったのですが、試験の時に役に立ち、せっかく易しい問題を作ったので、よかったです.😊