自己想只能想到暴力法。
子数组求和的优化,使用前缀和(Prefix Sum)的方式也想不到。现在要好好记着了。核心是:
res += presum[i + sz] - presum[i];
第三种方法的左边有多少种选择,右边有多少种选择,要考虑0的情况。也要能判别奇偶数情况:
class Solution {
public int sumOddLengthSubarrays(int[] arr) {
int res=0;
for(int i=0;i<arr.length;i++){
int left=i+1,right=arr.length-i;
int leftou=(left+1)/2,rightou=(right+1)/2;
int leftji=left/2,rightji=right/2;
res+=(leftou*rightou+rightji*leftji)*arr[i];
}
return res;
}
}