当前位置: 首页 > news >正文

leetcode 3652(定长滑动窗口/前缀和)

3652: 按策略买卖股票的最佳时机

思路:定长滑动窗口 / 前缀和,枚举修改子数组 [i−k,i−1]

方法一:前缀和
计算两个前缀和数组:

  • 定义数组 c,其中 c[i]=prices[i]⋅strategy[i]。计算 c 的前缀和,记作 sum
  • 计算 prices 的前缀和,记作 sum_sell

如果不修改,答案为 sum[n]。

class Solution { public: long long maxProfit(vector<int>& prices, vector<int>& strategy, int k) { int n=prices.size(); vector<long long> sum(n+1),sum_sell(n+1); //前缀和 for(int i=0;i<n;i++){ sum[i+1]=sum[i]+prices[i]*strategy[i]; sum_sell[i+1]=sum_sell[i]+prices[i]; } long long ans=sum[n]; for(int i=k;i<=n;i++){ long long res=sum[i-k]+sum[n]-sum[i]+sum_sell[i]-sum_sell[i-k/2]; ans=max(ans,res); } return ans; } };

方法二:定长滑动窗口

设不修改时的利润为 total。修改后,利润(相比不修改)增加了 sum (可能<0)。所有窗口的 sum 的最大值为 maxSum。那么答案为 total+max(maxSum,0)。这里可能出现 maxSum<0 的情况,此时不修改更好,也就是与 0 取最大值。

对于价格 p,如果修改前策略是 x,修改后策略是 y,那么利润增加了 p⋅(y−x)。比如原来买入,现在持有(不买入),那么利润增加了 p⋅(0−(−1))=p。又比如原来买入,现在卖出,那么利润增加了 p⋅(1−(−1))=2p。

下面计算每个窗口的 sum,考察从 [i−k,i−1] 向右滑到 [i−k+1,i],sum 如何变化。

class Solution { public: long long maxProfit(vector<int>& prices, vector<int>& strategy, int k) { long long total=0,sum=0,max_sum=0; for(int i=0;i<prices.size();i++){ int p=prices[i],s=strategy[i]; total+=p*s; //入右半,交易策略从s变成1 sum+=p*(1-s); //2<= k <=prices.length,尚未形成第一个窗口 if(i<k-1){ if(i>=k/2-1) sum-=prices[i-k/2+1]; //形成初始窗口时的左半边元素 continue; } //更新 max_sum=max(max_sum,sum); //对于下一个窗口,下标为i-(k/2-1)的元素从右半移到左半,交易策略从 1 变成 0;下标为 i-k+1 的元素从左半离开窗口 sum-=prices[i-k/2+1]-prices[i-k+1]*strategy[i-k+1]; } return total+max_sum; } };
http://www.cnnetsun.cn/news/136109.html

相关文章:

  • Vim插件管理器VAM:零基础小白也能轻松驾驭的终极神器
  • 30、Linux迁移案例:企业与政府的开源实践
  • 模块化多电平换流器(MMC)仿真分析:双闭环控制与最近电平逼近调制
  • Nacos3.1.1部署(Docker)
  • 【稀缺资料】20年经验专家解密:云边 Agent 延迟优化的3层架构设计
  • 跨领域Agent协同架构设计,5个真实工业场景中的落地实践案例
  • 半导体设备通信开发实战:基于secsgem的工业自动化解决方案
  • 【Java毕设全套源码+文档】基于springboot的钢材销售管理系统的设计与实现(丰富项目+远程调试+讲解+定制)
  • 26、Unix系统管理与实用技巧
  • [HZNUCTF 2023 preliminary]ppppop
  • 2025年国内主流的德国SAP系统官方授权实施代理商有哪些?
  • 服务器性能优化实战:从资源瓶颈定位到极致调优(附租赁服务器适配指南)
  • 三相异步电动机交流调速系统:原理、应用与优化控制策略
  • 3、数据科学命令行入门指南
  • Wireshark抓包模式选择:5个关键场景与实战技巧
  • 10、数据探索与可视化全攻略
  • 小学生学C++编程 (自定义函数(二))
  • GPT-5.2国内稳定接入实战:中转调用方案全解析(适配中小团队Python栈)
  • macOS存储空间告急?iSCSI Initiator终极解决方案助你突破存储瓶颈
  • 5分钟快速掌握:用node-qrcode打造专业级二维码
  • 杭亚 YS - 01H 声光报警器用户心得
  • 扔掉PuTTY!我用这款“瑞士军刀”实现了运维效率翻倍
  • Clipper2深度解析:掌握多边形裁剪与偏移的终极利器
  • Web 项目地图选型指南:从 Leaflet 到 MapTalks,如何选择合适的地图引擎?
  • 7、Windows应用开发中的用户界面控件使用指南
  • 18、Windows 应用数据管理全解析
  • AI大模型微调完全指南:13分钟让小模型“开挂“超越GPT-5,程序员必备收藏!
  • 汇编语言全接触-34.RichEdit 控件:更多的正文操作
  • 汇编语言全接触-35.RichEdit 控件:语法高亮显示
  • 自养号测评:跳出“隐形工具”定位,筑牢品牌增长核心基建