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

该博客介绍了如何解决一个算法题目,即计算给定正整数数组中所有奇数长度子数组的和。通过使用前缀和技巧,可以有效地遍历数组并计算每个奇数长度子数组的和,最终累加得到答案。博客内容包括问题描述、解题思路和代码实现,展示了动态规划和区间求和优化的应用。
摘要由CSDN通过智能技术生成

一、题目

1.题目描述

给你一个正整数数组 arr ,请你计算所有可能的奇数长度子数组的和。

子数组 定义为原数组中的一个连续子序列。

请你返回 arr 中 所有奇数长度子数组的和 。

2. 题目链接

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

二、解题报告

1.思路分析

  • 子数组的和就是找数组中[l,r]范围的和,只要确定l,r的长度为奇数即可。
  • 对于区间求和问题,可以通过前缀和优化

2. 代码实现

class Solution {
    public int sumOddLengthSubarrays(int[] arr) {
        int n = arr.length;
        int[] sum = new int[n+1];
        int res = 0;
        //前缀和
        for(int i = 1; i <= n; i++){
            sum[i] = sum[i-1] + arr[i-1];
        }
        //len是子数组的长度
        for(int len = 1; len <= n; i +=2){
            //l是子数组的左端点,右端点为r:l+len-1
            for(int l = 0; l+len-1 < n; l++){
                int r = len+l-1;
                //区间[l,r]的和
                res += sum[r+1] - sum[l];
            }
        }
        return res;
    }
}

3. 运行结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值