【LeetCode每日一题】——1588.所有奇数长度子数组的和

一【题目类别】

  • 前缀和

二【题目难度】

  • 简单

三【题目编号】

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

四【题目描述】

  • 给你一个正整数数组 arr ,请你计算所有可能的奇数长度子数组的和。
  • 子数组 定义为原数组中的一个连续子序列。
  • 请你返回 arr 中 所有奇数长度子数组的和 。

五【题目示例】

  • 示例 1

    • 输入: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
  • 示例 2

    • 输入:arr = [1,2]
    • 输出:3
    • 解释:总共只有 2 个长度为奇数的子数组,[1] 和 [2]。它们的和为 3 。
  • 示例 3

    • 输入:arr = [10,11,12]
    • 输出:66

六【题目提示】

  • 1 <= arr.length <= 100
  • 1 <= arr[i] <= 1000

七【题目进阶】

  • 你可以设计一个 O ( n ) O(n) O(n) 时间复杂度的算法解决此问题吗?

八【解题思路】

  • 该题很容易想到的思路就是暴力模拟,这个方式确实很简单,不过复杂度太高
  • 所以使用前缀和方法来解决该问题可以降低时间复杂度
    • 计算前缀和数组,前缀和数组的每一位表示从原数组的开始到每一位的累加和
    • 然后使用简单的数学运算找到所有奇数长度子数组
    • 最后使用前缀和数组对找到的所有奇数长度子数组求和
  • 最后返回结果即可
  • 具体细节可以参考下面的代码

九【时间频度】

  • 时间复杂度: O ( n 2 ) O(n^2) O(n2) n n n为传入的数组的长度
  • 空间复杂度: O ( n ) O(n) O(n) n n n为传入的数组的长度</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IronmanJay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值