@roimin2

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【paiza】連続するk要素1でコードの解説が一部分からないので教えて欲しい

解決したいこと

をjavaで解いて、解説を読みましたが
なぜ

    int max_sum = -100000

なのかが分かりません。教えていていただけますでしょうか。
例えば、3要素の和の場合は
-100 ≦ a_i ≦ 100で3要素の和の最低値が-300(-100+(-100)+(-100))という理屈は分かるのですが
なぜ連続するk要素1は-100000なのでしょうか

表示された条件では
すべてのテストケースにおいて、以下の条件をみたします。

・ 入力はすべて整数
・ 1 ≦ k ≦ n ≦ 1,000
・ -100 ≦ a_i ≦ 100

該当するソースコード

import java.util.*;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        int k = sc.nextInt();

        int[] a = new int[n];
        for (int i = 0; i < n; i++) {
            a[i] = sc.nextInt();
        }

        int max_sum_idx = -1;//なぜ-1なのか
        int max_sum = -100000;//なぜ-100000なのか
        for (int i = 0; i < n - k + 1; i++) {
            int tmp_sum = 0;
            for (int j = 0; j < k; j++) {//kをループさせるため
                tmp_sum += a[i + j];
            }
            if (max_sum < tmp_sum) {
                max_sum_idx = i;
                max_sum = tmp_sum;
            }
        }

        System.out.println(max_sum_idx + 1);
    }
}
0 likes

2Answer

k ≦ 1,000で
-100 ≦ a_i
なので
max_sumは -100x1000 = -100 000より小さくなることはありません。
よってその値で初期化しているだけです。

1Like

Comments

  1. @roimin2

    Questioner

    説明ありがとうございます!
    最低値を定義する時、最低値同士を足すだけじゃないんですね。
    最大値で乗算することもあるんですね。
  2. 理屈は
    > 例えば、3要素の和の場合は
    -100 ≦ a_i ≦ 100で3要素の和の最低値が-300(-100+(-100)+(-100))という理屈は分かるのですが

    と全く一緒です。

    3要素の和の最低値は 3 x (-100)なので
    k要素の和の最低値は k x (-100)です。
  3. @roimin2

    Questioner

    >3要素の和の最低値は 3 x (-100)なので
    k要素の和の最低値は k x (-100)

    すごくしっくりきました!
    問題解いてた時のもやもやが晴れました。
    ありがとうございます…!!!

This answer has been deleted for violation of our Terms of Service.

Your answer might help someone💌