【Leetcode】1588.所有奇数长度子数组的和

题目描述


思路

题目要求我们求解所有奇数长度数组的和。若暴力循环求解,时间复杂度过高。所以,我们可以采用前缀和优化。

如上图输入arr数组,sum[i]用于计算arr数组中前i个数的和。(在程序中,先给sum[0]赋值,等于arr[0],其余sum[i]=sum[i-1]+arr[i])

接着,我们计算需要返回的ret。我们定义两个循环变量i和j。先定i不动,j向后移动,然后每移动一个位置,就判断一下,是否i和j之间相差奇数个数,若是,则ret+=sum[j]-sum[i-1]。(包括i,所以是减去前一个位置的。)

然后i作为外层循环,后续循环如上面一样判断。

代码

cpp 复制代码
class Solution {
public:
        int sumOddLengthSubarrays(vector<int>&arr) {
        
        int length=arr.size();//获取数组中元素的个数
        int sum[length];//定义前缀和数组
        long long int ret;
        ret=0;
        sum[0]=arr[0];
        //计算前缀和
        for (int i=1;i<length;i++)
        {
            sum[i]=sum[i-1]+arr[i];
        }
        
        for (int  i=0;i<length;i++)
        {
            for (int j=i;j<length;j++)
            {
                
            if ((j-i+1)%2)//若相差奇数个数
            {
            if (i==0) ret+=sum[j];//i=0时,不分开讨论sum[i-1]数组越界。
            else
                ret+=sum[j]-sum[i-1];
            }
            
            }
        }
        return ret;
        }
};
相关推荐
一只幸运猫.4 小时前
2026Java 后端面试完整版|八股简答 + AI 大模型集成技术(最新趋势)
人工智能·面试·职场和发展
Old Uncle Tom4 小时前
OpenClaw 记忆系统 -- 记忆预加载
java·数据结构·算法·agent
会编程的土豆4 小时前
洛谷题单入门1 顺序结构
数据结构·算法·golang
生信碱移4 小时前
PACells:这个方法可以鉴定疾病/预后相关的重要细胞亚群,作者提供的代码流程可以学习起来了,甚至兼容转录组与 ATAC 两种数据类型!
人工智能·学习·算法·机器学习·数据挖掘·数据分析·r语言
智者知已应修善业5 小时前
【51单片机中的打飞机设计】2023-8-25
c++·经验分享·笔记·算法·51单片机
圣保罗的大教堂6 小时前
leetcode 1855. 下标对中的最大距离 中等
leetcode
智者知已应修善业7 小时前
【51单片机按键调节占空比3位数码管显示】2023-8-24
c++·经验分享·笔记·算法·51单片机
.5488 小时前
## Sorting(排序算法)
python·算法·排序算法
wuweijianlove8 小时前
算法的平均复杂度建模与性能回归分析的技术7
算法·数据挖掘·回归
子琦啊8 小时前
【算法复习】字符串 | 两个底层直觉,吃透高频题
linux·运维·算法