力扣1124. 表現良好的最長時間段

在這里插入圖片描述
這一題我看到數據范圍是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;和一些…