LeetCode1871 跳躍游戲VII

LeetCode 跳躍游戲 IV:二進制字符串的跳躍問題

題目描述

給定一個下標從 0 開始的二進制字符串?s?和兩個整數?minJump?和?maxJump。初始時,你位于下標 0 處(保證該位置為 '0')。你需要判斷是否能到達字符串的最后一個位置(下標為?s.length - 1)。移動規則如下:

  • 從位置?i?移動到?j,需滿足?i + minJump ≤ j ≤ min(i + maxJump, s.length - 1)
  • 目標位置?j?必須為 '0'。

解題思路分析

動態規劃 + 前綴和優化

核心思想
  1. 動態規劃數組?dpdp[i]?表示是否能到達位置?i
  2. 前綴和數組?pre:記錄從 0 到當前位置的可達狀態總和,用于快速計算區間和。
  3. 有效區間:對于位置?j,其可跳躍的起始位置范圍為?[j - maxJump, j - minJump]。通過前綴和數組快速判斷該區間內是否有可達的位置。
關鍵步驟
  1. 初始化

    • 若最后一個字符為 '1',直接返回?false
    • dp[0] = true(初始位置可達)。
    • 前綴和數組?pre?記錄可達位置的累計數量。
  2. 遍歷每個位置?j

    • 若當前位置為 '1',跳過。
    • 計算可跳躍的起始位置范圍?[left, right]
    • 利用前綴和數組快速查詢該區間內是否有可達位置。
    • 更新?dp[j]?和前綴和數組?pre

代碼實現

方法一:標準動態規劃 + 前綴

class Solution {public boolean canReach(String s, int minJump, int maxJump) {int n = s.length();if (s.charAt(n - 1) != '0') return false;boolean[] dp = new boolean[n];dp[0] = true;int[] pre = new int[n + 1]; // pre[i] 表示前i個位置的可達數pre[1] = 1;for (int j = 1; j < n; j++) {if (s.charAt(j) != '0') {pre[j + 1] = pre[j];continue;}int left = j - maxJump;int right = j - minJump;left = Math.max(left, 0);right = Math.min(right, j - 1);if (left > right) {pre[j + 1] = pre[j];continue;}int sum = pre[right + 1] - pre[left];dp[j] = sum > 0;pre[j + 1] = pre[j] + (dp[j] ? 1 : 0);}return dp[n - 1];}
}

方法二:簡化前綴和處理

class Solution {public boolean canReach(String s, int minJump, int maxJump) {int n = s.length();if (s.charAt(n - 1) != '0') return false;boolean[] dp = new boolean[n];dp[0] = true;int pre = 0; // 當前窗口內的可達數for (int i = 1; i < n; i++) {if (i >= minJump) pre += dp[i - minJump] ? 1 : 0;if (i > maxJump) pre -= dp[i - maxJump - 1] ? 1 : 0;dp[i] = s.charAt(i) == '0' && pre > 0;}return dp[n - 1];}
}

代碼解釋

方法一關鍵點

  1. 前綴和數組?pre

    • pre[i]?表示前?i?個位置(即索引?0?到?i-1)的可達數。
    • 通過?pre[right+1] - pre[left]?快速計算區間?[left, right]?的可達數。
  2. 有效區間計算

    • left = j - maxJumpright = j - minJump,確保區間不越界。
    • 若區間為空(left > right),則當前位置不可達。

方法二優化

  • 滾動窗口優化
    • 直接維護當前窗口內的可達數?pre,無需額外數組。
    • 當?i?超過?minJump?時,將?dp[i - minJump]?加入窗口。
    • 當?i?超過?maxJump?時,將?dp[i - maxJump - 1]?移出窗口。

復雜度分析

  • 時間復雜度O(n),每個位置僅遍歷一次。
  • 空間復雜度O(n),需存儲?dp?數組和前綴和數組(方法一)或僅?dp?數組(方法二)。

總結與優化

  1. 動態規劃是核心:通過?dp?數組記錄狀態,避免重復計算。
  2. 前綴和優化:將區間查詢復雜度從?O(n)?降至?O(1),大幅提升效率。
  3. 空間優化:方法二中僅需維護一個?pre?變量,進一步減少空間消耗。

擴展思考:若題目允許跳躍到 '1' 位置,但需額外條件(如跳躍次數限制),如何調整算法?

希望這篇博客對您有所幫助!如果需要進一步優化或補充細節,可以隨時告訴我~

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

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

相關文章

Burpsuite使用筆記

Burpsuite使用筆記 抓包設置代理open Browserintercept on輸入要抓包的網站回車ForwardHTTP history查看抓包數據其他瀏覽器配置burpsuite代理瀏覽器代理器插件配置打開代理同樣步驟訪問原理三級目錄抓包 設置代理 open Browser 打開內置瀏覽器 intercept on 輸入要抓包的網…

Windows 遠程桌面多端口訪問,局域網虛擬IP映射多個Windows 主機解決方案

情景 項目現場4G路由局域網中兩臺主機通過VPN連接到公司內網&#xff0c;實現遠程管理&#xff0c;要求映射兩個Windows 桌面進行管理。 目錄 情景 網絡 思路 已知 問題解決 1.客戶端通過VPN進入內網路由器配置NAT 2.使用遠程主機遠程桌面功能&#xff1a;IP端口號訪問 …

【深度學習】讀寫文件

讀寫文件 到目前為止&#xff0c;我們討論了如何處理數據&#xff0c;以及如何構建、訓練和測試深度學習模型。 然而&#xff0c;有時我們希望保存訓練的模型&#xff0c;以備將來在各種環境中使用&#xff08;比如在部署中進行預測&#xff09;。 此外&#xff0c;當運行一個…

仿Manus一

復制 ┌───────────────┐ ┌─────────────┐ │ 主界面UI │?─────?│ 會話管理模塊 │ └───────┬───────┘ └──────┬──────┘│ │▼ ▼ ┌─…

VS Code C++ 開發環境配置

VS Code 是當前非常流行的開發工具. 本文講述如何配置 VS Code 作為 C開發環境. 本文將按照如下步驟來介紹如何配置 VS Code 作為 C開發環境. 安裝編譯器安裝插件配置工作區 第一個步驟的具體操作會因為系統不同或者方案不同而有不同的選擇. 環境要求 首先需要立即 VS Code…

Flutter 學習之旅 之 flutter 不使用插件,實現簡單帶加載動畫的 LoadingToast 功能

Flutter 學習之旅 之 flutter 不使用插件&#xff0c;實現簡單帶加載動畫的 LoadingToast 功能 目錄 Flutter 學習之旅 之 flutter 不使用插件&#xff0c;實現簡單帶加載動畫的 LoadingToast 功能 一、簡單介紹 二、LoadingToast 三、簡單案例實現 四、關鍵代碼 一、簡單…

Spring (八)AOP-切面編程的使用

目錄 實現步驟&#xff1a; 1 導入AOP依賴 2 編寫切面Aspect 3 編寫通知方法 4 指定切入點表達式 5 測試AOP動態織入 圖示&#xff1a; 一 實現步驟&#xff1a; 1 導入AOP依賴 <!-- Spring Boot AOP依賴 --><dependency><groupId>org.springframewor…

開源數字人模型Heygem

一、Heygem是什么 Heygem 是硅基智能推出的開源數字人模型&#xff0c;專為 Windows 系統設計。基于先進的AI技術&#xff0c;僅需1秒視頻或1張照片&#xff0c;能在30秒內完成數字人形象和聲音克隆&#xff0c;在60秒內合成4K超高清視頻。Heygem支持多語言輸出、多表情動作&a…

uniapp開通開屏廣告后動態開啟或關閉開屏廣告

近期使用uniapp開發的APP有uniad的廣告對接&#xff0c;并且要求會員用戶不顯示包含開屏廣告在內的廣告&#xff0c;除開屏廣告外的廣告都可以通過uniapp廣告組件控制是否顯示 因uniad的開屏廣告無需代碼開發&#xff0c;經過uniad客服指點可在App.vue中的onLaunch生命周期中執…

神經網絡為什么要用 ReLU 增加非線性?

在神經網絡中使用 ReLU&#xff08;Rectified Linear Unit&#xff09; 作為激活函數的主要目的是引入非線性&#xff0c;這是神經網絡能夠學習復雜模式和解決非線性問題的關鍵。 1. 為什么需要非線性&#xff1f; 1.1 線性模型的局限性 如果神經網絡只使用線性激活函數&…

使用SSH密鑰連接本地git 和 github

目錄 配置本地SSH&#xff0c;添加到github首先查看本地是否有SSH密鑰生成SSH密鑰&#xff0c;和郵箱綁定將 SSH 密鑰添加到 ssh-agent&#xff1a;顯示本地公鑰*把下面這一串生成的公鑰存到github上* 驗證SSH配置是否成功終端跳轉到本地倉庫把http協議改為SSH&#xff08;如果…

關于AI數據分析可行性的初步評估

一、結論&#xff1a;可在部分環節嵌入&#xff0c;無法直接處理大量數據 1.非本地部署的AI應用處理非機密文件沒問題&#xff0c;內部文件要注意數據安全風險。 2.AI&#xff08;指高規格大模型&#xff09;十分適合探索性研究分析&#xff0c;對復雜報告無法全流程執行&…

矩陣分析-淺要理解(深度學習方向)

梯度分析與最優化 在深度學習的任務中&#xff0c;我們所期望的是訓練一個神經網絡&#xff0c;使得預測結果與真實標簽之間的誤差最小化&#xff0c;這可以近似看作是一個提供梯度下降等優化找到全局最優解的凸優化問題。 奇異值分解 在信息工程領域&#xff0c;對數據處理的…

使用DeepSeek+藍耘快速設計網頁簡易版《我的世界》小游戲

前言&#xff1a;如今&#xff0c;借助先進的人工智能模型與便捷的云平臺&#xff0c;即便是新手開發者&#xff0c;也能開啟創意游戲的設計之旅。DeepSeek 作為前沿的人工智能模型&#xff0c;具備強大的功能與潛力&#xff0c;而藍耘智算云平臺則為其提供了穩定高效的運行環境…

固定表頭、首列 —— uniapp、vue 項目

項目實地&#xff1a;也可以在 【微信小程序】搜索體驗&#xff1a;xny.handbook 另一個體驗項目&#xff1a;官網 一、效果展示 二、代碼展示 &#xff08;1&#xff09;html 部分 <view class"table"><view class"tr"><view class&quo…

【學習筆記】Numpy和Tensor的區別

1. NumPy 和 PyTorch Tensor 的格式對比 NumPy 使用的是 numpy.ndarray&#xff0c;而 PyTorch 使用的是 torch.Tensor&#xff0c;兩者的格式在數據存儲和計算方式上有所不同。 NumPy (numpy.ndarray) import numpy as np array np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.…

每天一道算法題【藍橋杯】【在排序數組中查找元素的第一個位置和最后一個位置】

思路 本題為查找左邊界和右邊界的標準模型 查找左邊界 int left 0, right nums.size() - 1, mid 0; //查找左邊界 while (left < right) { mid left (right - left) / 2; if (nums[mid] < target) left mid 1; else right mid; } 查找右邊界 int left 0, r…

Python數據分析之機器學習基礎

Python 數據分析重點知識點 本系列不同其他的知識點講解&#xff0c;力求通過例子讓新同學學習用法&#xff0c;幫助老同學快速回憶知識點 可視化系列&#xff1a; Python基礎數據分析工具數據處理與分析數據可視化機器學習基礎 五、機器學習基礎 了解機器學習概念、分類及…

我與DeepSeek讀《大型網站技術架構》(10)- 維基百科的高性能架構設計分析

目錄 網站整體架構核心組件請求處理流程圖關鍵環節說明 性能優化策略前端優化&#xff1a;攔截 80% 以上請求服務端優化&#xff1a;高性能 PHP 集群后端優化&#xff1a;存儲與緩存極致設計Memcached 持久化連接 性能優化策略對比表 網站整體架構 核心組件 Wikipedia 的架構…

Excel多級聯動下拉菜單設置

1.問題描述 現有數據表如下圖所示&#xff1a; 該表中包括省、市、縣三級目錄。 現要將其整理成數據表模板&#xff0c;如下圖所示&#xff1a; 要求制作成下拉菜單的形式&#xff0c;且每一級目錄的下拉菜單列表要根據上一級目錄的內容來確定。 如上圖所示&#xff0c;只有…