[リコウ] 1588. すべての奇数長部分配列の合計<接頭辞の合計>

[リコウ] 1588. すべての奇数長部分配列の合計

正の整数の配列 arr を指定して、奇数長のすべての可能な部分配列の合計を計算します。サブ配列は、元の配列の連続したサブシーケンスとして定義されます。すべての奇数長の部分配列の合計を arr に返してください。

例 1:
入力: arr = [1,4,2,5,3]
出力: 58
説明: すべての奇数長の部分配列とその合計は次のとおりです:
[1] = 1
[4] = 4
[2] = 2
[ 5] = 5
[3] = 3
[1,4,2] = 7
[4,2,5] = 11
[2,5,3] = 10
[1,4,2,5,3] = 15
us すべての合計値は 1 + 4 + 2 + 5 + 3 + 7 + 11 + 10 + 15 = 58 となります。

例 2:
入力: arr = [1,2]
出力: 3
説明: 奇数長のサブ配列は [1] と [2] の 2 つだけです。それらの合計は 3 です。

例 3:
入力: arr = [10,11,12]
出力: 66

ヒント:
1 <= arr.length <= 100
1 <= arr[i] <= 1000

答え

添字 0 1 2 3 4 5
元の配列 1 4 2 5 3
プレフィックスの合計 0 1 5 7 12 15
class Solution {
    
    
    public int sumOddLengthSubarrays(int[] arr) {
    
    
        int[] s = new int[arr.length + 1];

        for (int i = 0; i < arr.length; i++) {
    
    
            s[i + 1] = s[i] + arr[i];
        }

        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
    
    
            for (int length = 1; i + length <= arr.length; length += 2) {
    
    
                int right = i + length ;
                int left = i;
                sum += s[right] - s[left];
            }
        }
        return sum;
    }

    public static void main(String[] args) {
    
    
        Solution solution = new Solution();
        int[] testArry = {
    
    1, 4, 2, 5, 3};
        System.out.println(solution.sumOddLengthSubarrays(testArry));

    }
}

おすすめ

転載: blog.csdn.net/qq_44033208/article/details/132663546