Leetcode 3652. Best Time to Buy and Sell Stock using Strategy
- Leetcode 3652. Best Time to Buy and Sell Stock using Strategy
- 1. 解题思路
- 2. 代码实现
- 题目链接:3652. Best Time to Buy and Sell Stock using Strategy
1. 解题思路
这一题思路上就是一个滑动窗口的思路,我们只需要提前计算出所有长度为k2\frac{k}{2}2k的连续窗口当中本来的收益以及如果全部切换为卖出时的收益,然后每一次变动之后事实上就是在原始的收益的基础上减去长度为kkk的原始收益,然后加上后半段上全部卖出的收益。
我们遍历所有的滑动窗口然后取最大值即可。
2. 代码实现
给出python代码实现如下:
class Solution:def maxProfit(self, prices: List[int], strategy: List[int], k: int) -> int:n = len(prices)m = k // 2s1, s2 = [0 for _ in range(n-m+1)], [0 for _ in range(n-m+1)]s1[0] = sum(x*y for x, y in zip(prices[:m], strategy[:m]))s2[0] = sum(prices[:m])for i in range(n-m):s1[i+1] = s1[i] - prices[i]*strategy[i] + prices[i+m]*strategy[i+m]s2[i+1] = s2[i] - prices[i] + prices[i+m]s = sum(x*y for x, y in zip(prices, strategy))ans = sfor i in range(n-2*m+1):ans = max(ans, s - s1[i] - s1[i+m] + s2[i+m])return ans
提交代码评测得到:耗时371ms,占用内存31.65MB。