所有奇数长度子数组的和--O(n)数学法

Posted C_YCBX Py_YYDS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了所有奇数长度子数组的和--O(n)数学法相关的知识,希望对你有一定的参考价值。

题目


oj平台

解题思路

手写过程分析

解题代码

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. 所有奇数长度子数组的和(前缀和+数学)

Leetcode——所有奇数长度子数组的和(前缀和)

LeetCode 1588 所有奇数长度子数组的和[暴力 前缀和] HERODING的LeetCode之路

文巾解题1588. 所有奇数长度子数组的和

算法1588. 所有奇数长度子数组的和(多语言实现)

算法1588. 所有奇数长度子数组的和(多语言实现)