在这里插入图片描述
这一题我看到数据范围是10^4,暗自窃喜能用双重循环,看题目是典型的前缀和+哈希。不过需要一个转换将大于8小时的转化为1,其他都为-1,方便计算,之前的题目中也有这种方法。
那这样就简单了

class Solution {
public:int sum[100005];
unordered_map<int,int> mp;int longestWPI(vector<int>& hours) {for(int i=0;i<hours.size();i++){if(hours[i]>8)sum[i+1]=sum[i]+1;elsesum[i+1]=sum[i]-1;}int ans=0;mp[0]=0;for(int j=1;j<=hours.size();j++){for(auto it=mp.begin();it!=mp.end();it++){if(sum[j]-(it->first)>0){ans=max(ans,j-it->second);}}mp[sum[j]]=j;}return ans;}
};

这样是正常的前缀和+哈希,会出现错误
因为我们在枚举的过程中遇到一个前缀和就更新哈希表,这会导致相同的前缀和值它的索引往后放,也就会导致在计算子数组的长度时会变小,因此我们需要做的就是在遇到相同的值的时候不要更新哈希表即可。
正确代码如下:

class Solution {
public:int sum[100005];
unordered_map<int,int> mp;int longestWPI(vector<int>& hours) {for(int i=0;i<hours.size();i++){if(hours[i]>8)sum[i+1]=sum[i]+1;elsesum[i+1]=sum[i]-1;}int ans=0;mp[0]=0;for(int j=1;j<=hours.size();j++){for(auto it=mp.begin();it!=mp.end();it++){if(sum[j]-(it->first)>0){ans=max(ans,j-it->second);}}if(!mp.count(sum[j]))mp[sum[j]]=j;}return ans;}
};

时间复杂度为O(n^2)虽然轻松通过,但不是最优解
最优解需要我们领会sum取1和0的时候不用再像其他情况一样,算子数组
而是只要sum>0,那么子数组的长度最长就是j 因为存在sum[0]=0
所以我们可以分情况讨论
当sum>0的时候,可以直接更新ans
当sum<=0的时候,我们需要从哈希表中取出 sum-1的值
为啥非要取sum-1,因为sum【j】-sum【i】=子数组,所以必须sum【i】 必须比sum[j]要小.
那为啥不取其他比sum【j】的值呢,因为该前缀和在求的过程中是一步一步变小或者变大的,比如如果sum[j]=-2,那么sum=-1的索引一定在它左边,也就是说更小的前缀和在右边,而sum-1在构成子数组和为》0的所有情况中,构成的子数组的长度最大,因为它在最左边。
所以我们就可以写代码了,还要注意遇到相同的值的时候不要更新哈希表。

class Solution {
public:int sum[100005];
unordered_map<int,int> mp;int longestWPI(vector<int>& hours) {for(int i=0;i<hours.size();i++){if(hours[i]>8)sum[i+1]=sum[i]+1;elsesum[i+1]=sum[i]-1;}int ans=0;mp[0]=0;for(int j=1;j<=hours.size();j++){if(sum[j]>0){ans=max(ans,j);}else{if(mp.count(sum[j]-1)){ans=max(ans,j-mp[sum[j]-1]);}}if(!mp.count(sum[j])){mp[sum[j]]=j;}}return ans;}
};

时间复杂度为O(n)为最优解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/85960.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/85960.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/85960.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EDA2算法速通(编者崩溃版)

这个内容是用来回忆一下EDA2涉及的算法和解题的主要步骤&#xff1a; 有疑问或发现错误可以私信来讨论 高级综合概述 柏拉图优化&#xff1a;这个是来判断是否有哪些节点能完全被其他节点优化掉。比如&#xff08;1,2&#xff09;这个节点就可以完全优化&#xff08;3,4&…

雷池waf配置第三方登录-钉钉配置详细教程

雷池waf配置第三方登录-钉钉配置详细教程 前往钉钉开放平台https://open.dingtalk.com/ 选择一个登录方式登录钉钉开放平台 选择一个自己所管理的组织 登录成功后点击我的后台 选择应用开发 在钉钉应用下点击创建应用 填写应用名称和应用描述后点击保存 点击网页…

神经网络中的均方误差(Mean Squared Error)详解

引言 在机器学习和神经网络领域&#xff0c;损失函数&#xff08;Loss Function&#xff09;是衡量模型预测值与真实值之间差异的关键指标。均方误差&#xff08;Mean Squared Error, MSE&#xff09;作为一种经典的损失函数&#xff0c;因其简单性、可解释性和数学上的优良性…

day036-lsyncd实时同步服务与网站存储架构

文章目录 1. 实时同步工具2. lsyncd 实时同步服务2.1 环境准备2.2 rsync准备2.2.1 服务端检查2.2.2 客户端检查2.2.3 备份测试 2.3 配置lsyncd2.3.1 安装软件2.3.2 编写配置文件 2.4 测试 3. 案例-网站存储架构3.1 rsync服务配置3.1.1 服务端配置3.1.2 客户端配置 3.2 lsyncd服…

React Native WebView键盘难题:如何让输入框不被键盘遮挡?

写在前面 “明明点击了输入框&#xff0c;键盘却把内容顶得不见踪影&#xff01;” —— 这可能是React Native开发者使用WebView时最头疼的问题之一。 想象一下&#xff1a;你的App内嵌了一个网页表单&#xff0c;用户兴奋地准备填写信息&#xff0c;结果键盘弹出后&#xf…

Web攻防-XSS跨站浏览器UXSS突变MXSSVueReactElectron框架JQuery库写法和版本

知识点&#xff1a; 1、Web攻防-XSS跨站-浏览器&转换-UXSS&MXSS 2、Web攻防-XSS跨站-框架和库-VUE&React&Electron&JQuery 分类&#xff1a; 1、框架或三方库的XSS(Vue、React、Electron、JQuery) 2、浏览器或插件的XSS(UXSS) 3、客户端预览内核的XSS(MXS…

PyTorch 中torch.clamp函数使用详解和实战示例

torch.clamp 是 PyTorch 中的一个非常有用的函数&#xff0c;它可以将张量的每个元素限制在一个指定的范围内&#xff0c;超出范围的元素将被裁剪为边界值。 函数签名&#xff1a; torch.clamp(input, minNone, maxNone, outNone)参数说明&#xff1a; input&#xff1a;输入…

详解Redis数据库和缓存不一致的情况及解决方案

数据库与缓存不一致是分布式系统中常见问题&#xff0c;本质是数据在缓存层和存储层出现版本差异。 一、并发写操作导致不一致&#xff08;最常见&#xff09; 场景描述 线程A更新数据库 → 线程B更新数据库 → 线程B更新缓存 → 线程A更新缓存 结果&#xff1a;缓存中存储的…

湖北理元理律师事务所:企业债务危机的“急诊科”式应对方案

当企业陷入债务危机时&#xff0c;传统“头痛医头”的应对往往加速死亡。本方案基于企业债务重组实务&#xff0c;提炼出 “止血-清创-修复”三阶急救体系&#xff0c;助力企业守住生存底线。 第一阶段&#xff1a;精准止血&#xff08;0-30天关键期&#xff09; 目标&#x…

华为云Flexus+DeepSeek征文|基于Dify构建智能票据信息识别助手

华为云FlexusDeepSeek征文&#xff5c;基于Dify构建智能票据信息识别助手 一、构建智能票据信息识别助手前言二、构建智能票据信息识别助手环境2.1 基于FlexusX实例的Dify平台2.2 基于MaaS的模型API商用服务 三、构建智能票据信息识别助手实战3.1 配置Dify环境3.2 配置Dify工具…

Python实例题:基于联邦学习的隐私保护 AI 系统(分布式学习、隐私计算)

目录 Python实例题 题目 问题描述 解题思路 关键代码框架 难点分析 扩展方向 Python实例题 题目 基于联邦学习的隐私保护 AI 系统&#xff08;分布式学习、隐私计算&#xff09; 问题描述 开发一个基于联邦学习的隐私保护 AI 系统&#xff0c;包含以下功能&#xff…

点点(小红书AI搜索):生活场景的智能搜索助手

1. 产品概述 点点是小红书于2024年12月正式推出的AI搜索助手&#xff0c;由上海生动诗章科技有限公司开发&#xff0c;定位为生活场景搜索工具&#xff0c;聚焦交通、美食、旅游、购物等日常需求&#xff0c;旨在通过即时信息和真实用户分享帮助用户“精准避坑”。 核心特点 …

软件工程概述:核心概念、模型与方法全解析

一、软件工程定义与诞生背景 定义 将系统化、规范化、可度量的方法应用于软件开发、运行和维护的过程&#xff08;IEEE标准&#xff09;。 核心目标&#xff1a;在可控成本下&#xff0c;生产高质量、可维护、满足需求的软件产品。 - 软件开发&#xff1a;需求 → 设计 → 编码…

LVS+Keepalived+nginx

LVSKeepalivednginx 1 安装依赖 sudo yum install ipvsadm keepalived -y 查询是否安装成功 rpm -q -a keepalived 2 配置虚拟IP并安装ipvsadm /etc/sysconfig/network-scripts cp ifcfg-ens33 ifcfg-ens33:1 修改里面配置文件 TYPE"Ethernet" PROXY_METHOD"n…

数据分析实操篇:京东淘宝商品实时数据获取与分析

在电商行业蓬勃发展的当下&#xff0c;数据已然成为驱动决策的核心要素。无论是商家精准把控市场需求、制定营销策略&#xff0c;还是消费者做出明智的购物抉择&#xff0c;都离不开对电商平台商品数据的深入剖析。京东和淘宝作为国内电商领域的两大巨头&#xff0c;汇聚了海量…

微信小程序扫码添加音频播放报错{errCode:10001, errMsg:“errCode:602,err:error,not found param“}

主要流程代码如下&#xff1a; let innerAudioContext wx.createInnerAudioContext() // 提示音 innerAudioContext.autoplay true innerAudioContext.src ../images/scan.mp3 innerAudioContext.onError(function(res){ console.log(onError 开始监听:,res) }) innerAudi…

SVN合并指南,从dev合并部分revision到release指南

dev合并到release 1.进入release的工作区&#xff0c;右击选择Merge 点击Next 2.确认merge来源分支和当前分支 点击Show Log&#xff0c;挑选需要合并的单号 3. 选择需要合并的commit 注意点击Hide no-mergeable revisions&#xff0c;来隐藏掉已经合并的commit 4.选择需…

《计算机网络:自顶向下方法(第8版)》Chapter 8 课后题

复习题 8.1节 R1. 机密性是攻击者截获原始明文消息的密文加密后无法确定原始明文的属性。消息完整性是接收方可以检测发送的消息&#xff08;无论是否加密&#xff09;在传输过程中是否又被更改的属性。 因此&#xff0c;这两者是不同的概念&#xff0c;可以独立存在。一个在传…

抖音小程序开发:ttml和传统html的区别

1 传统 Web 中 HTML 的角色 HyperText Markup Language&#xff1a;用来描述页面结构——标题、段落、图片、表单…… 只负责“放什么元素、排在什么层级”&#xff0c;真正的行为靠 JS&#xff0c;视觉靠 CSS。 <!-- 传统网页&#xff1a;结构 class 交给 CSS --> &…

Unity2D 街机风太空射击游戏 学习记录 #12QFramework引入

概述 这是一款基于Unity引擎开发的2D街机风太空射击游戏&#xff0c;笔者并不是游戏开发人&#xff0c;作者是siki学院的凉鞋老师。 笔者只是学习项目&#xff0c;记录学习&#xff0c;同时也想帮助他人更好的学习这个项目 作者会记录学习这一期用到的知识&#xff0c;和一些…