for (let i = 0; i < n; i++) {
if (i === 0) {
y[i] = x[i]
} else {
y[i] = y[i - 1] + x[i]
}
}
// n * m
for (let i = 0; i < n; i++) {
for (let j = 0; j < m; j++) {
if (i === 0 && j === 0) {
y[j][i] = x[j][i]
} else if (j === 0) {
y[j][i] = y[j][i - 1] + x[j][i] // 一维数组前缀和
} else if (i === 0) {
y[j][i] = y[j - 1][i] + x[j][i] // 一维数组前缀和
} else {
y[j][i] = y[j - 1][i] + y[j][i - 1] - y[j - 1][i - 1] + x[j][i]
}
}
}
给你一个正整数数组 arr ,请你计算所有可能的奇数长度子数组的和
let preSum = [arr[0]], res = 0, n = arr.length;
for (let i = 1; i < n; i++) {
preSum[i] = preSum[i - 1] + arr[i]
}
preSum.unshift(0)
console.log('preSum', preSum)
for (let i = 0; i < n; i++) {
for (let j = 1; i + j - 1 < n; j += 2) {
// console.log('ele', arr.slice(i, i + j))
// i = 0的时候,preSum[0]是人为补上的
// S(i + j) - S(i)是{x(i), x(i + 1), x(i + 2), ..., x(i + j)的和
res += preSum[i + j] - preSum[i]
}
}
return res;