2023每日刷题(十九)
Leetcode—1588.所有奇数长度子数组的和
直接法实现代码
int sumOddLengthSubarrays(int* arr, int arrSize){
int i = 1;
int sum = 0;
int left = 0, right;
int k;
int j = 0;
while(i <= arrSize) {
for(left = 0; left < arrSize; left++) {
right = left + i;
k = left;
if(right <= arrSize) {
while(k < right) {
sum += arr[k++];
}
} else {
break;
}
}
j++;
i = 2 * j + 1;
}
return sum;
}
运行结果
枚举法实现代码
int sumOddLengthSubarrays(int* arr, int arrSize){
int ans = 0, sum;
for(int i = 0; i < arrSize; i++) {
for(int j = i; j < arrSize; j++) {
if((j - i + 1) % 2 == 1) {
sum = 0;
for(int k = i; k <= j; k++) {
sum += arr[k];
}
ans += sum;
}
}
}
return ans;
}
运行结果
时间复杂度
O
(
n
3
)
O(n^3)
O(n3),空间复杂度
O
(
1
)
O(1)
O(1)
改进的实现代码
int sumOddLengthSubarrays(int* arr, int arrSize){
int ans = 0, sum;
for(int i = 0; i < arrSize; i++) {
sum = 0;
for(int j = i; j < arrSize; j++) {
sum += arr[j];
if((j - i + 1) % 2 == 1) {
ans += sum;
}
}
}
return ans;
}
时间复杂度 O ( n 2 ) O(n^2) O(n2),空间复杂度 O ( 1 ) O(1) O(1)
运行结果
前缀和实现代码
int sumOddLengthSubarrays(int* arr, int arrSize){
int *preSum = (int *)malloc(sizeof(int) * (arrSize + 1));
preSum[0] = 0;
for(int i = 0; i < arrSize; i++) {
preSum[i + 1] = preSum[i] + arr[i];
}
int ans = 0;
for(int i = 0; i < arrSize; i++) {
for(int j = i; j < arrSize; j++) {
if((j - i + 1) % 2 == 1) {
ans += preSum[j + 1] - preSum[i];
}
}
}
free(preSum);
return ans;
}
时间复杂度 O ( n 2 ) O(n^2) O(n2),空间复杂度 O ( n ) O(n) O(n)
运行结果
之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!