找到一个数组的【所有奇数个数的】子数组

本文介绍了一个算法问题,即计算一个数组中所有包含特定元素的子数组数量,并区分这些子数组的奇数和偶数长度。文章给出了具体的计算公式,并通过实例解释了如何使用这些公式来解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解法

 var getSubOddArrays = function(arr) {
  let res = []
  for (let i = 0; i < arr.length; i++) {
    for (let oddLen = 1; (oddLen + i) <= arr.length; oddLen += 2) {
      res.push(arr.slice(i, i+oddLen))
    }
  }
  return res
 };

问题2:有一个数组A(长度为n),求出数组 A中包含第i个元素A[i]的子数组的个数?

    1, 在子数组中,以A[i]为起点的数组,有n - i

    2,不以A[i]为起点的数组,前半部分一共有 i中情况,后半部分有n-i种情况,那么不以A[i]为起点一共有 ( n - i ) * i

    所以包含A[i]的所有子数组一共有 ( n - i ) + (n - i) * i

也就是 ( i + 1 ) * ( n - i )


根据上述结论
1, 所以包含A[i]的奇数个数的数组总和为

    ((i + 1) * (n - i) + 1) / 2

2, 所以包含A[i]的偶数个数的数组总和为

     ((i + 1) * (n - i) ) / 2

有小数的情况 向下取整。


为什么记录这个:

1588. Sum of All Odd Length Subarrays

解析

https://web.stanford.edu/class/cs9/sample_probs/SubarraySums.pdf

https://leetcode.com/problems/sum-of-all-odd-length-subarrays/discuss/854184/JavaC%2B%2BPython-O(N)-Time-O(1)-Space

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值