news 2026/9/2 3:13:17

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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; } };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 22:37:33

18、Linux 后台办公基础架构的开源解决方案

Linux 后台办公基础架构的开源解决方案 在企业环境中,开源解决方案正发挥着越来越重要的作用,能够满足各种不同的业务需求。下面将介绍一些值得关注的开源工具和系统。 1. 开源数据库管理工具 myPHPadmin 是一款基于 Web 的开源 MySQL 数据库管理工具,它为数据库管理提供…

作者头像 李华
网站建设 2026/9/2 20:41:10

46、Linux 共享对象与内存问题调试指南

Linux 共享对象与内存问题调试指南 1. 创建共享对象 从概念上讲,共享对象和程序的唯一区别通常在于共享对象一般没有 main 函数,但这并非硬性要求。你可以创建既能像可执行文件一样被调用,又能动态链接到更大程序中的共享对象,动态链接器本身就是这样的共享对象,本章前…

作者头像 李华
网站建设 2026/9/2 19:26:13

immunedeconv免疫细胞去卷积工具完整指南:快速掌握肿瘤微环境分析

immunedeconv免疫细胞去卷积工具完整指南&#xff1a;快速掌握肿瘤微环境分析 【免费下载链接】immunedeconv 项目地址: https://gitcode.com/gh_mirrors/imm/immunedeconv 免疫细胞去卷积分析是现代肿瘤免疫研究中的关键技术&#xff0c;能够从混合样本的基因表达数据…

作者头像 李华
网站建设 2026/9/2 23:00:47

48、调试技巧与工具使用

调试技巧与工具使用 1. Electric Fence 的功能与局限 1.1 检测越界与下溢 Electric Fence 不仅能检测内存越界(overruns),还能检测内存下溢(underruns)。内存下溢是指进程向内存块之前的地址写入数据,这种错误可能在指针运算时发生,例如: char *buf = malloc(1024…

作者头像 李华
网站建设 2026/9/2 10:47:20

DevOps理念gitgitlab

一、软件开发生命周期&#xff08;SDLC&#xff09;&#xff08;一&#xff09;概述Software Development Life Cycle&#xff08;SDLC&#xff09;是组织和实施软件开发管理的框架&#xff0c;定义系统工程师和开发人员在软件开发和维护中的工作阶段&#xff0c;主要包括需求收…

作者头像 李华
网站建设 2026/9/3 0:20:47

Gopeed全能下载器:重新定义你的下载体验

在数字资源日益丰富的今天&#xff0c;下载工具已成为我们获取信息的重要桥梁。然而传统的下载软件往往存在着诸多局限&#xff1a;平台兼容性差、协议支持单一、界面操作繁琐。今天&#xff0c;让我们一同探索Gopeed这款基于Golang和Flutter技术打造的全能下载管理器&#xff…

作者头像 李华