2026/1/12 3:16:38
网站建设
项目流程
南宁网站改版,郑州公司网站制作,简单网页设计作品欣赏,安徽网站建设有限公司【LetMeFly】3652.按策略买卖股票的最佳时机#xff1a;滑动窗口
力扣题目链接#xff1a;https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-using-strategy/
给你两个整数数组 prices 和 strategy#xff0c;其中#xff1a;
prices[i] 表示第 i 天某股票…【LetMeFly】3652.按策略买卖股票的最佳时机滑动窗口力扣题目链接https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-using-strategy/给你两个整数数组prices和strategy其中prices[i]表示第i天某股票的价格。strategy[i]表示第i天的交易策略其中-1表示买入一单位股票。0表示持有股票。1表示卖出一单位股票。同时给你一个偶数整数k你可以对strategy进行最多一次修改。一次修改包括选择strategy中恰好k个连续元素。将前k / 2个元素设为0持有。将后k / 2个元素设为1卖出。利润定义为所有天数中strategy[i] * prices[i]的总和。返回你可以获得的最大可能利润。注意没有预算或股票持有数量的限制因此所有买入和卖出操作均可行无需考虑过去的操作。示例 1输入prices [4,2,8], strategy [-1,0,1], k 2输出10解释修改策略利润计算利润原始[-1, 0, 1](-1 × 4) (0 × 2) (1 × 8) -4 0 84修改 [0, 1][0, 1, 1](0 × 4) (1 × 2) (1 × 8) 0 2 810修改 [1, 2][-1, 0, 1](-1 × 4) (0 × 2) (1 × 8) -4 0 84因此最大可能利润是 10通过修改子数组[0, 1]实现。示例 2输入prices [5,4,3], strategy [1,1,0], k 2输出9解释修改策略利润计算利润原始[1, 1, 0](1 × 5) (1 × 4) (0 × 3) 5 4 09修改 [0, 1][0, 1, 0](0 × 5) (1 × 4) (0 × 3) 0 4 04修改 [1, 2][1, 0, 1](1 × 5) (0 × 4) (1 × 3) 5 0 38因此最大可能利润是 9无需任何修改即可达成。提示2 prices.length strategy.length 1051 prices[i] 105-1 strategy[i] 12 k prices.lengthk是偶数解题方法滑动窗口既然修改范围是定长的并且最多修改1次那么就从前往后将每一种修改可能都试试呗。初始先计算原数组不修改时收益再从前往后依次尝试修改区间取收益最大的一个作为答案。如何从一个区间快速计算出下一个区间呢变化的有3个变化前的区间起点、区间中点、区间终点把这三个位置的值更新一下就好了。时间复杂度O ( l e n ( p r i c e s ) ) O(len(prices))O(len(prices))空间复杂度O ( 1 ) O(1)O(1)AC代码C/* * LastEditTime: 2025-12-18 18:42:50 */typedeflonglongll;classSolution{public:llmaxProfit(vectorintprices,vectorintstrategy,intk){ll ans0;intnprices.size();for(inti0;in;i){ansstrategy[i]*prices[i];}ll nowans;for(inti0;ik/2;i){now(0-strategy[i])*prices[i];}for(intik/2;ik;i){now(1-strategy[i])*prices[i];}ansmax(ans,now);for(inti1;ikn;i){// i-1: 0-original// ik/2-1: 1-0// ik-1: original-1now(strategy[i-1]-0)*prices[i-1](0-1)*prices[ik/2-1](1-strategy[ik-1])*prices[ik-1];ansmax(ans,now);}returnans;}};同步发文于CSDN和我的个人博客原创不易转载经作者同意后请附上原文链接哦~千篇源码题解已开源