news 2026/4/18 4:44:26

leetcode 3652. 按策略买卖股票的最佳时机 中等

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
leetcode 3652. 按策略买卖股票的最佳时机 中等

给你两个整数数组pricesstrategy,其中:

  • 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^5
  • 1 <= prices[i] <= 10^5
  • -1 <= strategy[i] <= 1
  • 2 <= k <= prices.length
  • k是偶数

分析:前缀和 + 定长滑动窗口。

需要计算两个前缀和数组:第一个 pre_sum 数组记录从第 1 天到第 x 天的初始利润,第二个 sell 数组记录从第 1 天到第 x 天每天都卖出股票的利润。

滑动窗口大小为 k。最初这个窗口的左端点在第 1 天,右端点在第 k 天,对应数组下标 [0,k)。用计算的总初始利润,先减去这 k 天的初始利润,再加上第 (1+k)/2 天到第 k 天每天都卖出股票的利润,就是修改策略的利润。之后这个窗口每次向右滑动一天,直到最后一天,答案保留利润的最大值。

long long maxProfit(int* prices, int pricesSize, int* strategy, int strategySize, int k) { long long pre_sum[pricesSize+5],sell[pricesSize+5],ans=0,suml=0,sumr=0; sell[0]=prices[0],pre_sum[0]=prices[0]*strategy[0]; for(int i=1;i<pricesSize;++i) sell[i]=sell[i-1]+prices[i],pre_sum[i]=pre_sum[i-1]+strategy[i]*prices[i]; ans=pre_sum[pricesSize-1]; for(int l=0,r=k;r<=pricesSize;++l,++r) { int mid=(l+r)/2; long long add=sell[r-1]-sell[mid-1],sub=pre_sum[r-1]-pre_sum[l]+prices[l]*strategy[l]; ans=fmax(ans,pre_sum[pricesSize-1]-sub+add); } return ans; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 4:04:59

宝可梦编辑器pkNX完全手册:从入门到精通的全流程指南

想要深度定制Switch平台宝可梦游戏体验吗&#xff1f;pkNX作为一款专业的ROM编辑工具&#xff0c;让你能够全面掌控游戏数据&#xff0c;从精灵属性到训练师配置&#xff0c;实现个性化的游戏世界构建。无论你是想要创造更具挑战性的对战环境&#xff0c;还是设计独特的冒险旅程…

作者头像 李华
网站建设 2026/4/18 4:03:38

3大策略彻底解决SGLang项目PyTorch版本兼容性难题

3大策略彻底解决SGLang项目PyTorch版本兼容性难题 【免费下载链接】sglang SGLang is a structured generation language designed for large language models (LLMs). It makes your interaction with models faster and more controllable. 项目地址: https://gitcode.com/…

作者头像 李华
网站建设 2026/4/18 4:03:32

AgentWeb 5.x:重新定义Android WebView开发新范式

在移动应用开发领域&#xff0c;WebView作为连接原生与H5的关键桥梁&#xff0c;其性能与体验直接影响用户留存。AgentWeb 5.x通过革命性的架构重构&#xff0c;为开发者提供了前所未有的开发便利与功能扩展能力。本文将深入解析其五大核心优势&#xff0c;展示如何用更少的代码…

作者头像 李华
网站建设 2026/4/18 4:03:04

如何彻底卸载OneDrive:Windows 10终极清理指南

如何彻底卸载OneDrive&#xff1a;Windows 10终极清理指南 【免费下载链接】OneDrive-Uninstaller Batch script to completely uninstall OneDrive in Windows 10 项目地址: https://gitcode.com/gh_mirrors/one/OneDrive-Uninstaller 你是否厌倦了OneDrive在后台偷偷运…

作者头像 李华
网站建设 2026/4/18 5:13:09

群晖Video Station元数据增强插件:打造智能影视库的终极方案

还在为Video Station获取不到完整影视信息而烦恼吗&#xff1f;这款专为群晖NAS设计的视频信息插件&#xff0c;将彻底改变您的影视库管理体验&#xff01;它通过多源数据抓取技术&#xff0c;让您的电影、电视剧自动拥有精美海报、详细剧情介绍和权威评分数据。 【免费下载链接…

作者头像 李华