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

解法

 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、付费专栏及课程。

余额充值