3652. Best Time to Buy and Sell Stock using Strategy
Description
You are given two integer arrays prices
and strategy
, where:
prices[i]
is the price of a given stock on theith
day.strategy[i]
represents a trading action on theith
day, where:-1
indicates buying one unit of the stock.0
indicates holding the stock.1
indicates selling one unit of the stock.
You are also given an even integer k
, and may perform at most one modification to strategy
. A modification consists of:
- Selecting exactly
k
consecutive elements instrategy
. - Set the first
k / 2
elements to0
(hold). - Set the last
k / 2
elements to1
(sell).
The profit is defined as the sum of strategy[i] * prices[i]
across all days.
Return the maximum possible profit you can achieve.
Note: There are no constraints on budget or stock ownership, so all buy and sell operations are feasible regardless of past actions.
Example 1:
Input: prices = [4,2,8], strategy = [-1,0,1], k = 2
Output: 10
Explanation:
Modification | Strategy | Profit Calculation | Profit |
---|---|---|---|
Original | [-1, 0, 1] | (-1 × 4) + (0 × 2) + (1 × 8) = -4 + 0 + 8 | 4 |
Modify [0, 1] | [0, 1, 1] | (0 × 4) + (1 × 2) + (1 × 8) = 0 + 2 + 8 | 10 |
Modify [1, 2] | [-1, 0, 1] | (-1 × 4) + (0 × 2) + (1 × 8) = -4 + 0 + 8 | 4 |
Thus, the maximum possible profit is 10, which is achieved by modifying the subarray [0, 1]
.
Example 2:
Input: prices = [5,4,3], strategy = [1,1,0], k = 2
Output: 9
Explanation:
Modification | Strategy | Profit Calculation | Profit |
---|---|---|---|
Original | [1, 1, 0] | (1 × 5) + (1 × 4) + (0 × 3) = 5 + 4 + 0 | 9 |
Modify [0, 1] | [0, 1, 0] | (0 × 5) + (1 × 4) + (0 × 3) = 0 + 4 + 0 | 4 |
Modify [1, 2] | [1, 0, 1] | (1 × 5) + (0 × 4) + (1 × 3) = 5 + 0 + 3 | 8 |
Thus, the maximum possible profit is 9, which is achieved without any modification.
Constraints:
2 <= prices.length == strategy.length <= 105
1 <= prices[i] <= 105
-1 <= strategy[i] <= 1
2 <= k <= prices.length
k
is even
Solutions
Solution 1: Prefix Sum + Enumeration
We use an array \(\textit{s}\) to represent the prefix sum, where \(\textit{s}[i]\) is the total profit for the first \(i\) days, i.e., \(\textit{s}[i] = \sum_{j=0}^{i-1} \textit{prices}[j] \times \textit{strategy}[j]\). We also use an array \(\textit{t}\) to represent the prefix sum of stock prices, where \(\textit{t}[i] = \sum_{j=0}^{i-1} \textit{prices}[j]\).
Initially, the maximum profit is \(\textit{s}[n]\). We enumerate the right endpoint \(i\) of the subarray to be modified, with the left endpoint being \(i-k\). After modification, the first \(k/2\) days of the subarray have strategy \(0\), and the last \(k/2\) days have strategy \(1\), so the profit change is:
Therefore, we can update the maximum profit by enumerating all possible \(i\).
The time complexity is \(O(n)\), and the space complexity is \(O(n)\), where \(n\) is the length of the array.
1 2 3 4 5 6 7 8 9 10 11 12 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|