news 2026/5/11 3:37:20

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/5/11 19:35:51

如何用Ramile自动化工具快速搞定软件著作权申请

如何用Ramile自动化工具快速搞定软件著作权申请 【免费下载链接】ramile China software copyright extraction tool - 中国软件著作权代码自动提取工具 项目地址: https://gitcode.com/gh_mirrors/ra/ramile 在软件开发过程中&#xff0c;软件著作权申请是每个项目都绕…

作者头像 李华
网站建设 2026/5/9 22:53:11

Open Images数据集实战指南:从下载到模型训练全流程

Open Images数据集实战指南&#xff1a;从下载到模型训练全流程 【免费下载链接】dataset The Open Images dataset 项目地址: https://gitcode.com/gh_mirrors/dat/dataset 数据集概览 Open Images数据集是Google推出的超大规模计算机视觉数据集&#xff0c;包含约900…

作者头像 李华
网站建设 2026/5/9 21:17:55

无集成,不AI:织维LOOMX——无缝连接业务系统的企业级智能体平台

当前&#xff0c;企业引入AI技术时普遍面临一个核心矛盾&#xff1a;AI模型本身强大&#xff0c;却难以融入实际业务流程。数据孤岛、系统割裂、场景脱节&#xff0c;导致AI成为昂贵的“数字奢侈品”&#xff0c;而非普惠的生产力工具。织维LOOMX应运而生&#xff0c;以“无缝集…

作者头像 李华
网站建设 2026/5/10 10:27:21

AI助力JDK11下载与配置:一键搞定开发环境

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个智能JDK下载配置助手&#xff0c;要求&#xff1a;1.自动检测用户操作系统类型和架构 2.从官方镜像源获取JDK11最新稳定版 3.根据系统环境自动配置PATH和JAVA_HOME 4.提供验…

作者头像 李华
网站建设 2026/5/11 7:44:23

电商网站实战:el-popover在商品卡片中的应用技巧

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个电商商品卡片组件&#xff0c;使用el-popover实现以下功能&#xff1a;1) 鼠标悬停显示商品详情浮层&#xff1b;2) 浮层包含商品大图、价格、库存和立即购买按钮&#xff…

作者头像 李华