解法
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