Best Time to Buy and Sell Stock using Strategy

Medium
Watch on YouTube ↗

Solution

class Solution {
    public long maxProfit(int[] prices, int[] strategy, int k) {
        int n = prices.length;
        // original , strategy1
        long prefixarr[] = new long[n+1];
        long prefixsell[] = new long[n+1];

        for(int i=0; i<n; i++) {
            // [0,___]
            prefixarr[i+1] = prefixarr[i] + prices[i]*strategy[i];
            prefixsell[i+1] = prefixsell[i] + prices[i];
        }
        long max = prefixarr[n];

        // traversing all n-k+1
        for(int i=k-1; i<n; i++) {
            long leftsum, ksum, rightsum = 0;
            leftsum = prefixarr[i-k+1]- prefixarr[0];
            rightsum = prefixarr[n]-prefixarr[i+1];
            ksum = prefixsell[i+1]-prefixsell[(i+1)-k/2];
            max = Math.max(max, leftsum + ksum + rightsum);
        }
        return max;
    }
}