本题要求计算给定的一系列正整数中奇数的和。
时间: 2023-10-29 10:32:01 浏览: 136
算法1:遍历求和
遍历给定的一系列正整数,如果是奇数就加入到总和中。
时间复杂度:O(n)。
C++ 代码
class Solution {
public:
int sumOddLengthSubarrays(vector<int>& arr) {
int sum = 0;
for (int i = 0; i < arr.size(); i++) {
if (arr[i] % 2 == 1) {
sum += arr[i];
}
}
return sum;
}
};
算法2:数学公式
根据数学公式,如果一个正整数数组的长度为n,那么它的所有奇数子数组的和为:
(1 + n) / 2 * ((n + 1) / 2)
时间复杂度:O(1)。
C++ 代码
class Solution {
public:
int sumOddLengthSubarrays(vector<int>& arr) {
int n = arr.size();
int sum = 0;
for (int i = 0; i < n; i++) {
int odd = (i + 1) / 2, even = i / 2 + 1;
int total_odd = odd * (n - i), total_even = even * (n - i);
sum += (total_odd + total_even) * arr[i];
}
return sum;
}
};
阅读全文