所有奇数长度子数组的和--O(n)数学法
Posted C_YCBX Py_YYDS
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了所有奇数长度子数组的和--O(n)数学法相关的知识,希望对你有一定的参考价值。
题目
解题思路
手写过程分析
解题代码
class Solution {
public:
int sumOddLengthSubarrays(vector<int>& arr) {
int n=arr.size();
int sum = 0;
for(int i=0;i<n;i++){
//得到该位置左右两边元素的长度
int leftCount = i,rightCount = n-i-1;
//得到扩散左右元素奇偶的情况数
int leftOdd = (leftCount+1)/2,rightOdd = (rightCount+1)/2;
int leftEven = leftCount/2+1,rightEven = rightCount/2+1;
//根据左右情况数计算最终的组合情况数*该位置元素值
sum += (leftOdd*rightOdd+leftEven*rightEven)*arr[i];
}
return sum;
}
};
以上是关于所有奇数长度子数组的和--O(n)数学法的主要内容,如果未能解决你的问题,请参考以下文章
[E前缀和] lc1588. 所有奇数长度子数组的和(前缀和+数学)