算法基礎學習Day6(動態窗口)

在這里插入圖片描述

文章目錄

  • 1.題目
  • 2.題目解答
    • 1.最大連續1的個數
      • 題目及題目解析
      • 算法學習
        • 思路一:暴力解法
        • 思路二:滑動窗口
      • 代碼提交
    • 2.將x減到0的最小操作數
      • 題目及題目解析
      • 算法學習
        • 滑動窗口解決問題
      • 代碼提交

1.題目

  1. 1004. 最大連續1的個數 III - 力扣(LeetCode)
  2. 1658. 將 x 減到 0 的最小操作數 - 力扣(LeetCode)

2.題目解答

1.最大連續1的個數

題目及題目解析

image-20241210182148011

算法學習

思路一:暴力解法

我們可以通過直接遍歷將數組,將所以可能全部找出來,然后將最長的數組返回即可

解法如下:

class Solution {
public:int longestOnes(vector<int>& nums, int k) {int maxLen = 0;for (int start = 0; start < nums.size(); ++start) {int zeroCount = 0;int end = start;while (end < nums.size()) {if (nums[end] == 0) {zeroCount++;}if (zeroCount <= k) {maxLen = max(maxLen, end - start + 1);} else {break;}end++;}}return maxLen;}
};

當然這是過不了的需要我們優化

image-20241210185312807

思路二:滑動窗口

但是其實發現right指針并不用每次都回到left的右邊

我們可以通過計數讓left向后走,而right可以保持在原有位置

也就是說可以用滑動窗口解決這個問題:

1.進窗口

image-20241210191931544

k加上right能移動到的最大位置就是窗口的初始化

2.出窗口

零的個數大于k時,就要將left向右移動,然后對left進行判斷,

零的個數減到等于k此時就完成了出窗口

每次出窗口對長度進行判斷求最大的長度即可

這部分的代碼如下:

int ret = 0;
for(int right = 0,left = 0,zero = 0;right<nums.size();right++){if(nums[right]==0)//進窗口{zero++;}while(zero>k)//出窗口{if(nums[left++]==0){zero--;}}ret = max(ret,right-left+1);//判斷}

代碼提交

class Solution {
public:int longestOnes(vector<int>& nums, int k) {int left = 0,right =0,zero = 0;int ret = 0;for(;right<nums.size();right++){if(nums[right]==0){zero++;}while(zero>k){if(nums[left++]==0){zero--;}}ret = max(ret,right-left+1);}return ret;}
};

2.將x減到0的最小操作數

題目及題目解析

image-20241210193455492

算法學習

這道題如果直接做會很難,但是如果將思路轉化一下,就會變得簡單了:

image-20241210194229560

要求的數的和為x,我們可以將這個數組的和計算出為sum,那么剩下的數組就為sum-x

又由于要求出最小長度就可以轉化為求最長子數組的長度了

那么這道題就變得簡單了求最長子數組的長度且數組的和為target

滑動窗口解決問題

轉換后的這道題之前寫過:

int right = 0,left = 0,sum = 0,ret = 0;
while(right<nums.size())
{sum+=nums[right];while(sum>target){sum -= nums[left];left++;}if(sum == target){ret = max(ret,right-left+1);}right++;
}

核心代碼寫完后后續將判斷返回的內容加入即可

代碼提交

class Solution {
public:int minOperations(vector<int>& nums, int x) {int sum = 0,target = 0,left = 0,right = 0;for(int i = 0;i<nums.size();i++){sum+=nums[i];}target = sum-x;if(target<0){return -1;}sum = 0;int ret = -1;while(right<nums.size()){sum+=nums[right];while(sum>target){sum -= nums[left];left++;}if(sum == target){ret = max(ret,right-left+1);}right++;}if(ret==-1){return ret;}else{return nums.size()-ret;}}
};

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/62498.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/62498.shtml
英文地址,請注明出處:http://en.pswp.cn/web/62498.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于springboot+vue的公交線路查詢系統(全套)

一、系統架構 前端&#xff1a;vue | element-ui | html 后端&#xff1a;springboot | mybatis-plus 環境&#xff1a;jdk1.8 | mysql | maven | nodejs 二、代碼及數據庫 三、功能介紹 01. web端-首頁1 02. web端-首頁2 03. web端-注冊 04. web端-登錄 …

ASP.NET Core8.0學習筆記(二十五)——EF Core Include導航數據加載之預加載與過濾

一、導航屬性數據加載 1.在EF Core中可以使用導航屬性來加載相關實體。 2.加載實體的三種方式&#xff1a; (1)預先加載&#xff1a;直接在查詢主體時就把對應的依賴實體查出來&#xff08;作為初始查詢的一部分&#xff09; (2)顯式加載&#xff1a;使用代碼指示稍后顯式的從…

Linux 基礎環境的開發工具以及使用(下)

1. make / Makefile 自動化構建的工具 1&#xff09;引入 在我們進行一些大型的工程的時候&#xff0c;代碼量是極其大&#xff0c;當我們代碼在進行一系列的編譯的時候&#xff0c;難免會出現一些錯誤&#xff0c;當我們對錯誤進行一系列的更改之后&#xff0c;難道我們需要…

沃豐科技智能客服在跨境電商獨立站中的核心角色

隨著全球化進程的加速和互聯網技術的不斷發展&#xff0c;跨境電商行業蓬勃興起&#xff0c;為消費者提供了更廣闊、更便捷的購物選擇。在這樣一個競爭激烈的市場環境中&#xff0c;優質的客戶服務成為了企業脫穎而出的關鍵。沃豐科技智能客服憑借其先進的技術和人性化的設計理…

uniapp 彈出軟鍵盤后打開二級頁面,解決其UI布局變動

軟鍵盤彈出&#xff0c;此時點擊某按鈕打開二級頁面&#xff0c;position:fixed 位于底部的按鈕不見了&#xff08;通過加高其區域&#xff0c;發現被下移動了&#xff09;&#xff0c;什么原因不清楚? 但是發現是軟鍵盤彈出導致&#xff0c;問題解決通過隱藏鍵盤再打開二級頁…

Centos7下搭建Prometheus+Grafana監控

Prometheus 監控 Prometheus 監控系統的架構包括以下組件&#xff1a; Prometheus Server&#xff1a; Prometheus 服務器是監控系統的核心組件&#xff0c;負責收集、存儲和處理指標數據。它定期從各種數據源&#xff08;如 Exporter、Agent 等&#xff09;拉取指標數據&…

MyBatis-Plus(為簡化開發而生)

一、MyBatis-Plus概述 官網&#xff1a; baomidou.com MyBatis-Plus&#xff08;簡稱 MP&#xff09; 在 MyBatis 的基礎上只做增強不做改變&#xff0c;為簡化開發、提高效率而生。 &#xff08;1&#xff09;單表操作 不需要編寫sql語句&#xff0c;封裝方法&#xff0c;…

深入解析 C++11 的 `std::atomic`:誤區、性能與實際應用

在現代 C 開發中&#xff0c;std::atomic 是處理多線程同步時的重要工具之一。它通過提供原子操作保證了線程安全&#xff0c;但在實際使用時卻隱藏著許多不為人知的陷阱和性能影響。本篇文章將帶你深入理解 std::atomic 的使用方式、潛在問題&#xff0c;以及如何正確應用于多…

芋道源碼,芋道sql,yudao,yudao-vue-pro拒絕割韭菜

芋道的開發指南實際上只需要小小的操作就可以觀看啦 為了避免被割韭菜 我們可以使用插件去進行解鎖文檔 項目地址 otomayss/free-yd (github.com)[這里是圖片002]https://github.com/otomayss/free-yd

Mac軟件推薦

Mac軟件推薦 截圖SnipasteXnipBob 快捷啟動Raycast 系統檢測Stats 解壓縮The UnarchiverKeka&#xff08;付費&#xff09; 視頻播放IINA 視頻下載Downie&#xff08;付費&#xff09; 屏幕劉海TopNotchMediaMate&#xff08;付費&#xff09;NotchDrop&#xff08;付費&#x…

【ETCD】【源碼閱讀】 深入解析 raftNode.start`函數:Raft 核心啟動邏輯剖析

raftNode.start方法 是 etcd 中 Raft 模塊的核心啟動點&#xff0c;其職責是管理 Raft 狀態機的狀態變遷、日志處理及集群通信等邏輯。通過對源碼的逐行分析&#xff0c;我們將全面揭示其運行機制&#xff0c;探討其設計背后的分布式系統理念。 函數核心結構 raftNode.start 方…

車站值班員題庫

1. 聯系用手信號顯示十、五、三車距離信號中的“三車”&#xff08;約33m&#xff09;信號時&#xff0c;晝間的顯示方式為展開的綠色信號旗單臂平伸下壓 &#xff08; 一 &#xff09;次。J442 2. 聯系用手信號顯示股道號碼時&#xff0c;晝間右臂向上直伸&#xff0c…

BI中場戰事:國外廠商退,國產廠商進

從沉睡的黃金到經濟的新寵&#xff0c;數據要素正上演華麗轉身。 近年來&#xff0c;數字經濟的長驅向前&#xff0c;離不開數據要素價值釋放所帶來的持續動力。作為第五大生產要素&#xff0c;數據要素的價值釋放需要從數據采集、傳輸到存儲、治理&#xff0c;再到分析和可視…

2024年華中杯數學建模C題基于光纖傳感器的平面曲線重建算法建模解題全過程文檔及程序

2024年華中杯數學建模 C題 基于光纖傳感器的平面曲線重建算法建模 原題再現 光纖傳感技術是伴隨著光纖及光通信技術發展起來的一種新型傳感器技術。它是以光波為傳感信號、光纖為傳輸載體來感知外界環境中的信號&#xff0c;其基本原理是當外界環境參數發生變化時&#xff0c…

【LeetCode每日一題】LeetCode 209.長度最小的子數組

LeetCode 209.長度最小的子數組 題目描述 給定一個正整數數組 nums 和一個正整數 target&#xff0c;找出連續子數組的最小長度&#xff0c;使得子數組的和大于或等于 target。如果不存在符合條件的子數組&#xff0c;返回 0。 Java 實現代碼 public class Solution {publi…

【openwrt】openwrt-21.02 基于IP地址使用ipset實現策略路由操作說明

openwrt版本信息 DISTRIB_ID=OpenWrt DISTRIB_RELEASE=21.02-SNAPSHOT DISTRIB_REVISION=r0-6bf6af1d5 DISTRIB_TARGET=mediatek/mt7981 DISTRIB_ARCH=aarch64_cortex-a53 DISTRIB_DESCRIPTION=OpenWrt 21.02-SNAPSHOT r0-6bf6af1d5 DISTRIB_TAINTS=no-all busybox override …

【H2O2|全棧】MySQL的基本操作(三)

目錄 前言 開篇語 準備工作 案例準備 多表查詢 笛卡爾積 等值連接 外連接 內連接 自連接 子查詢 存在和所有 含于 分頁查詢 建表語句 結束語 前言 開篇語 本篇繼續講解MySQL的一些基礎的操作——數據字段的查詢中的多表查詢和分頁查詢&#xff0c;與單表查詢…

從單體到微服務:如何借助 Spring Cloud 實現架構轉型

一、Spring Cloud簡介 Spring Cloud 是一套基于 Spring 框架的微服務架構解決方案&#xff0c;它提供了一系列的工具和組件&#xff0c;幫助開發者快速構建分布式系統&#xff0c;尤其是微服務架構。 Spring Cloud 提供了諸如服務發現、配置管理、負載均衡、斷路器、消息總線…

yarn : 無法加載文件 C:\Users\L\AppData\Roaming\npm\yarn.ps1,因為在此系統上禁

關于執行安裝yarn命令后執行yarn -v報錯&#xff1a; 先確認執行安裝yarn命令是否有誤 # 安裝yarn npm install yarn -g 終端輸入set-ExecutionPolicy RemoteSigned 當然如果yarn -v仍然執行失敗&#xff0c;考慮使用管理員方式運行IDEA&#xff0c; 注&#xff1a;如上操作…

centos 常見問題處理

免密登錄配置 # 在當前機器下 執行命令 生成 私鑰和公鑰 ~/.ssh 目錄下 ssh-keygen -t rsa # 執行如下命令 把公鑰 放到 對應機器上的 ~/.ssh/authorized_keys ssh-copy-id 172.17.68.220 # 如此 兩臺機器兩兩配置 centos ssh連接慢 vim /etc/ssh/sshd_config # UseD…