输入: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
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sum-of-all-odd-length-subarrays
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public:
int sumOddLengthSubarrays(vector<int>& arr) {
int n=arr.size();
if(n==1){
return arr[0];
}
//定义一个动态数组,例如,前i个元素的总和放入第i+1位置处,而前i个元素的总和,由preSum[i]+arr[i]得到
vector<int> preSum(n+1);
//动态数组的大小为n+1
for(int i=0;i<n;i++){
preSum[i+1]=preSum[i]+arr[i];
}
int sum=0;
for(int start=0;start<n;start++){
for(int length=1;start+length<=n;length+=2){
int end=start+length-1;
sum+=preSum[end+1]-preSum[start];
}
}
return sum;
}
};