1. 程式人生 > 其它 >所有奇數長度子陣列的和 -- LeetCode -- 8.29

所有奇數長度子陣列的和 -- LeetCode -- 8.29

所有奇數長度子陣列的和

  給你一個正整數陣列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
我們將所有值求和得到 1 + 4 + 2 + 5 + 3 + 7 + 11 + 10 + 15 = 58

思路:

  注意是連續的子陣列;從第一個數開始遍歷,依次和後面奇數個相加,所有情況走完,遍歷第二個數;需要注意的是,他要是第一個數最多和四個陣列成陣列,那麼第二個數最多和兩個陣列成陣列;

class Solution {
public:
    int sumOddLengthSubarrays(vector<int>& arr) {
        int ans = 0, n = arr.size();
        for(int i = 0; i < n; i ++){
            int k = 1;
            while(i + k <= n){//注意不要超陣列
                for(int j = 0; j < k; j++){
                    ans += arr[i + j];
                }
                k += 2;
            } 
        }
        return ans;
    }
};