2026/2/12 14:38:57
网站建设
项目流程
海尔建设此网站的目的是什么,重庆开县网站建设公司推荐,动漫制作专业可以升什么本科,禅城网站建设价格给你两个整数数组 prices 和 strategy#xff0c;其中#xff1a;prices[i] 表示第 i 天某股票的价格。strategy[i] 表示第 i 天的交易策略#xff0c;其中#xff1a;-1 表示买入一单位股票。0 表示持有股票。1 表示卖出一单位股票。同时给你一个 偶数 整数 k#xff0c;…给你两个整数数组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 10^51 prices[i] 10^5-1 strategy[i] 12 k prices.lengthk是偶数分析前缀和 定长滑动窗口。需要计算两个前缀和数组第一个 pre_sum 数组记录从第 1 天到第 x 天的初始利润第二个 sell 数组记录从第 1 天到第 x 天每天都卖出股票的利润。滑动窗口大小为 k。最初这个窗口的左端点在第 1 天右端点在第 k 天对应数组下标 [0,k)。用计算的总初始利润先减去这 k 天的初始利润再加上第 (1k)/2 天到第 k 天每天都卖出股票的利润就是修改策略的利润。之后这个窗口每次向右滑动一天直到最后一天答案保留利润的最大值。long long maxProfit(int* prices, int pricesSize, int* strategy, int strategySize, int k) { long long pre_sum[pricesSize5],sell[pricesSize5],ans0,suml0,sumr0; sell[0]prices[0],pre_sum[0]prices[0]*strategy[0]; for(int i1;ipricesSize;i) sell[i]sell[i-1]prices[i],pre_sum[i]pre_sum[i-1]strategy[i]*prices[i]; anspre_sum[pricesSize-1]; for(int l0,rk;rpricesSize;l,r) { int mid(lr)/2; long long addsell[r-1]-sell[mid-1],subpre_sum[r-1]-pre_sum[l]prices[l]*strategy[l]; ansfmax(ans,pre_sum[pricesSize-1]-subadd); } return ans; }