# 18.12.2025 [3652. Best Time to Buy and Sell Stock using Strategy]
Max Profit by modifying a sliding window sum #medum
18.12.2025
3652. Best Time to Buy and Sell Stock using Strategy medium blog post substack youtube
Join me on Telegram
Problem TLDR
Max Profit by modifying a sliding window sum #medum
Intuition
Use two separate sliding window sums. The total max profit is `sum + (modified window - original window)``
// 0 1 2 i
// 4 2 8
//-1 0 1 k=2
// i
// 9 2 9 5
//-1 0 1 1 k=4
// i
Approach
use a single variable to hold sliding window sum
Complexity
Time complexity: $$O(n)$$
Space complexity: $$O(1)$$
Code
// 22ms
fun maxProfit(p: IntArray, st: IntArray, k: Int): Long {
var sm = 0L; var so = 0L; var diff = 0L
return p.indices.sumOf { i ->
sm += p[i] - if (i-k/2 >= 0) p[i-k/2] else 0
so += st[i] * p[i] - if (i-k >= 0) st[i-k] * p[i-k] else 0
if (i+1-k >= 0) diff = max(diff, sm - so)
1L * st[i] * p[i]
} + diff
}
// 0ms
pub fn max_profit(pr: Vec<i32>, st: Vec<i32>, k: i32) -> i64 {
let (mut sm, mut so, mut diff, k) = (0,0,0,k as usize);
pr.iter().zip(&st).enumerate().map(|(i, (&p, &s))|{
sm += (p - if i >= k/2 { pr[i-k/2] } else { 0 }) as i64;
so += (s*p - if i >= k { st[i-k] * pr[i-k] } else { 0 }) as i64;
if i + 1 >= k { diff = diff.max(sm - so) }
(s * p) as i64
}).sum::<i64>() + diff
}

