Welcome to Subscribe On Youtube
1588. Sum of All Odd Length Subarrays
Description
Given an array of positive integers arr, return the sum of all possible odd-length subarrays of arr.
A subarray is a contiguous subsequence of the array.
Example 1:
Input: arr = [1,4,2,5,3] Output: 58 Explanation: The odd-length subarrays of arr and their sums are: [1] = 1 [4] = 4 [2] = 2 [5] = 5 [3] = 3 [1,4,2] = 7 [4,2,5] = 11 [2,5,3] = 10 [1,4,2,5,3] = 15 If we add all these together we get 1 + 4 + 2 + 5 + 3 + 7 + 11 + 10 + 15 = 58
Example 2:
Input: arr = [1,2] Output: 3 Explanation: There are only 2 subarrays of odd length, [1] and [2]. Their sum is 3.
Example 3:
Input: arr = [10,11,12] Output: 66
Constraints:
1 <= arr.length <= 1001 <= arr[i] <= 1000
Follow up:
Could you solve this problem in O(n) time complexity?
Solutions
-
class Solution { public int sumOddLengthSubarrays(int[] arr) { int n = arr.length; int ans = 0; for (int i = 0; i < n; ++i) { int s = 0; for (int j = i; j < n; ++j) { s += arr[j]; if ((j - i + 1) % 2 == 1) { ans += s; } } } return ans; } } -
class Solution { public: int sumOddLengthSubarrays(vector<int>& arr) { int n = arr.size(); int ans = 0; for (int i = 0; i < n; ++i) { int s = 0; for (int j = i; j < n; ++j) { s += arr[j]; if ((j - i + 1) & 1) { ans += s; } } } return ans; } }; -
class Solution: def sumOddLengthSubarrays(self, arr: List[int]) -> int: ans, n = 0, len(arr) for i in range(n): s = 0 for j in range(i, n): s += arr[j] if (j - i + 1) & 1: ans += s return ans -
func sumOddLengthSubarrays(arr []int) (ans int) { n := len(arr) for i := range arr { s := 0 for j := i; j < n; j++ { s += arr[j] if (j-i+1)%2 == 1 { ans += s } } } return } -
function sumOddLengthSubarrays(arr: number[]): number { const n = arr.length; let ans = 0; for (let i = 0; i < n; ++i) { let s = 0; for (let j = i; j < n; ++j) { s += arr[j]; if ((j - i + 1) % 2 === 1) { ans += s; } } } return ans; } -
impl Solution { pub fn sum_odd_length_subarrays(arr: Vec<i32>) -> i32 { let n = arr.len(); let mut ans = 0; for i in 0..n { let mut s = 0; for j in i..n { s += arr[j]; if (j - i + 1) % 2 == 1 { ans += s; } } } ans } } -
class Solution { public int sumOddLengthSubarrays(int[] arr) { int ans = arr[0], f = arr[0], g = 0; for (int i = 1; i < arr.length; ++i) { int ff = g + arr[i] * (i / 2 + 1); int gg = f + arr[i] * ((i + 1) / 2); f = ff; g = gg; ans += f; } return ans; } } -
class Solution { public: int sumOddLengthSubarrays(vector<int>& arr) { int ans = arr[0], f = arr[0], g = 0; for (int i = 1; i < arr.size(); ++i) { int ff = g + arr[i] * (i / 2 + 1); int gg = f + arr[i] * ((i + 1) / 2); f = ff; g = gg; ans += f; } return ans; } }; -
int sumOddLengthSubarrays(int* arr, int arrSize) { int n = arrSize; int f[n]; int g[n]; int ans = f[0] = arr[0]; g[0] = 0; for (int i = 1; i < n; ++i) { f[i] = g[i - 1] + arr[i] * (i / 2 + 1); g[i] = f[i - 1] + arr[i] * ((i + 1) / 2); ans += f[i]; } return ans; } -
int sumOddLengthSubarrays(int* arr, int arrSize) { int ans = arr[0], f = arr[0], g = 0; for (int i = 1; i < arrSize; ++i) { int ff = g + arr[i] * (i / 2 + 1); int gg = f + arr[i] * ((i + 1) / 2); f = ff; g = gg; ans += f; } return ans; } -
class Solution: def sumOddLengthSubarrays(self, arr: List[int]) -> int: ans, f, g = arr[0], arr[0], 0 for i in range(1, len(arr)): ff = g + arr[i] * (i // 2 + 1) gg = f + arr[i] * ((i + 1) // 2) f, g = ff, gg ans += f return ans -
func sumOddLengthSubarrays(arr []int) (ans int) { f, g := arr[0], 0 ans = f for i := 1; i < len(arr); i++ { ff := g + arr[i]*(i/2+1) gg := f + arr[i]*((i+1)/2) f, g = ff, gg ans += f } return } -
function sumOddLengthSubarrays(arr: number[]): number { const n = arr.length; let [ans, f, g] = [arr[0], arr[0], 0]; for (let i = 1; i < n; ++i) { const ff = g + arr[i] * (Math.floor(i / 2) + 1); const gg = f + arr[i] * Math.floor((i + 1) / 2); [f, g] = [ff, gg]; ans += f; } return ans; } -
impl Solution { pub fn sum_odd_length_subarrays(arr: Vec<i32>) -> i32 { let mut ans = arr[0]; let mut f = arr[0]; let mut g = 0; for i in 1..arr.len() { let ff = g + arr[i] * ((i as i32) / 2 + 1); let gg = f + arr[i] * (((i + 1) as i32) / 2); f = ff; g = gg; ans += f; } ans } }