news 2026/2/4 17:51:20

LeetCode 3652.按策略买卖股票的最佳时机:滑动窗口

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode 3652.按策略买卖股票的最佳时机:滑动窗口

【LetMeFly】3652.按策略买卖股票的最佳时机:滑动窗口

力扣题目链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-using-strategy/

给你两个整数数组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 <= 105
  • 1 <= prices[i] <= 105
  • -1 <= strategy[i] <= 1
  • 2 <= k <= prices.length
  • k是偶数

解题方法:滑动窗口

既然修改范围是定长的,并且最多修改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(vector<int>&prices,vector<int>&strategy,intk){ll ans=0;intn=prices.size();for(inti=0;i<n;i++){ans+=strategy[i]*prices[i];}ll now=ans;for(inti=0;i<k/2;i++){now+=(0-strategy[i])*prices[i];}for(inti=k/2;i<k;i++){now+=(1-strategy[i])*prices[i];}ans=max(ans,now);for(inti=1;i+k<=n;i++){// i-1: 0->original// i+k/2-1: 1->0// i+k-1: original->1now+=(strategy[i-1]-0)*prices[i-1]+(0-1)*prices[i+k/2-1]+(1-strategy[i+k-1])*prices[i+k-1];ans=max(ans,now);}returnans;}};

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/2 20:25:57

win10 - 删除非法命名的文件夹的方法

文章目录win10 - 删除非法命名的文件夹的方法概述笔记删除非法命名的文件夹微PE工具箱 - 不行蜂鸟PE - OK备注备注尝试搞出一个畸形目录出来用手工在资源管理器中建立畸形目录&#xff0c;是不行的。用命令行试试在msys2-mingw64中试试备注备注ENDwin10 - 删除非法命名的文件夹…

作者头像 李华
网站建设 2026/2/4 6:14:42

必看!2025年单北斗GNSS形变监测高口碑产品排行榜

在2025年&#xff0c;单北斗GNSS形变监测设备凭借其高精度、可靠性和多功能性&#xff0c;成为市场上不可或缺的监测工具。该设备广泛应用于桥梁、隧道及地质灾害领域&#xff0c;通过实时数据分析&#xff0c;实现对结构的动态监测和预警。在众多优秀产品中&#xff0c;单北斗…

作者头像 李华
网站建设 2026/2/1 2:20:12

【计网】网络分层模型和http协议

前言计算机网络是一个复杂的系统&#xff0c;采取分层的结构&#xff0c;可以将复杂系统分解为可管理的模块。每层模块专注解决特定问题&#xff0c;使其各司其职&#xff0c;便于管理维护。在网络分层模型中&#xff0c;每个分层都接收由它下一层所提供的特定服务&#xff0c;…

作者头像 李华
网站建设 2026/2/3 16:11:37

Kotaemon在华为云上的部署实践:全流程记录

Kotaemon在华为云上的部署实践&#xff1a;全流程记录 在企业智能客服、知识库问答系统日益普及的今天&#xff0c;一个真正“可用”的AI代理不仅要能回答问题&#xff0c;更要答得准、有依据、可维护。然而现实是&#xff0c;许多基于大模型的聊天机器人仍困于“幻觉频发”“…

作者头像 李华
网站建设 2026/2/4 17:13:21

校园便利平台|基于springboot + vue校园便利平台系统(源码+数据库+文档)

校园便利平台 目录 基于springboot vue校园便利平台系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 基于springboot vue校园便利平台系统 一、前言 博主介绍&…

作者头像 李华
网站建设 2026/1/30 12:39:04

38、Linux 脚本编程:bc 计算器、数组与特殊技巧

Linux 脚本编程:bc 计算器、数组与特殊技巧 1. bc - 任意精度计算器语言 在处理整数运算时,shell 能满足很多需求,但当需要进行高级数学运算或使用浮点数时,shell 就显得力不从心了。这时可以借助外部程序,比如 bc 。 bc 是许多 Linux 系统上都有的计算器程序,它能…

作者头像 李华