跳躍游戲Ⅱ[中等]

優質博文:IT-BLOG-CN

一、題目

給定一個長度為n0索引整數數組nums。初始位置為nums[0]。每個元素nums[i]表示從索引i向前跳轉的最大長度。換句話說,如果你在nums[i]處,你可以跳轉到任意nums[i + j]處:
0 <= j <= nums[i]
i + j < n
返回到達nums[n - 1]的最小跳躍次數。生成的測試用例可以到達nums[n - 1]

示例 1:
輸入: nums = [2,3,1,1,4]
輸出: 2
解釋: 跳到最后一個位置的最小跳躍數是2。從下標為0跳到下標為1的位置,跳1步,然后跳3步到達數組的最后一個位置。

示例 2:
輸入: nums = [2,3,0,1,4]
輸出: 2

1 <= nums.length <= 104
0 <= nums[i] <= 1000
題目保證可以到達nums[n-1]

二、代碼

反向查找出發位置: 我們的目標是到達數組的最后一個位置,因此我們可以考慮最后一步跳躍前所在的位置,該位置通過跳躍能夠到達最后一個位置。如果有多個位置通過跳躍都能夠到達最后一個位置,那么我們應該如何進行選擇呢?直觀上來看,我們可以「貪心」地選擇距離最后一個位置最遠的那個位置,也就是對應下標最小的那個位置。因此,我們可以從左到右遍歷數組,選擇第一個滿足要求的位置。找到最后一步跳躍前所在的位置之后,我們繼續貪心地尋找倒數第二步跳躍前所在的位置,以此類推,直到找到數組的開始位置。

class Solution {public int jump(int[] nums) {int position = nums.length - 1;int steps = 0;while (position > 0) {for (int i = 0; i < position; i++) {if (i + nums[i] >= position) {position = i;steps++;break;}}}return steps;}
}

時間復雜度: 時間復雜度:O(n^2),其中n是數組長度。有兩層嵌套循環,在最壞的情況下,例如數組中的所有元素都是1position需要遍歷數組中的每個位置,對于position的每個值都有一次循環。
空間復雜度: O(1),不需要額外的空間開銷。

正向查找可到達的最大位置: 方法一雖然直觀,但是時間復雜度比較高,有沒有辦法降低時間復雜度呢?

如果我們「貪心」地進行正向查找,每次找到可到達的最遠位置,就可以在線性時間內得到最少的跳躍次數。例如,對于數組[2,3,1,2,4,2,3],初始位置是下標0,從下標0出發,最遠可到達下標2。下標0可到達的位置中,下標1的值是3,從下標1出發可以達到更遠的位置,因此第一步到達下標1。從下標1出發,最遠可到達下標4。下標1可到達的位置中,下標4的值是4,從下標4出發可以達到更遠的位置,因此第二步到達下標4

在具體的實現中,我們維護當前能夠到達的最大下標位置,記為邊界。我們從左到右遍歷數組,到達邊界時,更新邊界并將跳躍次數增加1。在遍歷數組時,我們不訪問最后一個元素,這是因為在訪問最后一個元素之前,我們的邊界一定大于等于最后一個位置,否則就無法跳到最后一個位置了。如果訪問最后一個元素,在邊界正好為最后一個位置的情況下,我們會增加一次「不必要的跳躍次數」,因此我們不必訪問最后一個元素。

class Solution {public int jump(int[] nums) {int length = nums.length;int end = 0;int maxPosition = 0; int steps = 0;for (int i = 0; i < length - 1; i++) {maxPosition = Math.max(maxPosition, i + nums[i]); if (i == end) {end = maxPosition;steps++;}}return steps;}
}

時間復雜度: O(n),其中n是數組長度。
空間復雜度: O(1),不需要額外的空間開銷。

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

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

相關文章

【Python 訓練營】N_8 打印阿姆斯特朗數

題目 輸入一個數&#xff0c;判斷是否為阿姆斯特朗數&#xff0c;阿姆斯特朗數指一個n位正整數等于其各位數字的n次方之和。其中n為3時是水仙花數。 分析 利用循環&#xff0c;獲取數的長度&#xff0c;根據長度和定義&#xff0c;拆分出來運算 答案 while True:n int(in…

【Python 訓練營】N_7 打印水仙花數

題目 打印出1000以內所有的"水仙花數"&#xff0c;所謂"水仙花數"是指一個三位數&#xff0c;其各位數字立方和等于該數本身。例如&#xff1a;153是一個"水仙花數"&#xff0c;因為1531的三次方&#xff0b;5的三次方&#xff0b;3的三次方。 …

數學啟發式

學習資料&#xff1a; 優化求解器 | Gurobi 數學啟發式算法&#xff1a;參數類型與案例實現 數學啟發式算法 | 可行性泵 (Feasibility Pump)算法精講&#xff1a;一份讓您滿意的【理論介紹編程實現數值實驗】學習筆記(PythonGurobi實現) 大佬到底是大佬&#xff01;這些資料太…

Mac Ubuntu雙系統解決WiFi和WiFi 5G網絡不可用問題

文章目錄 設備信息1. Ubuntu WiFi不可用解決方式查看Mac的網卡型號根據網卡型號搜索獲取到的解決方法查看WiFi名字問題參考鏈接 2. 解決WiFi重啟后失效問題打開終端創建.sh腳本文件編輯腳本文件復制粘貼腳本修改腳本權限創建并編輯systemd service文件復制粘貼下文到systemd se…

Typescript怎樣對URL參數進行編碼?

URL中的參數需要進行編碼&#xff08;URL encoding&#xff09;是為了確保傳輸的參數不包含特殊字符&#xff0c;同時確保數據的可靠性和安全性。 特殊字符如空格、&、?等在URL中有特殊含義&#xff0c;如果直接包含在參數值中&#xff0c;可能會導致解析錯誤或者安全問題…

只考數據結構,計算機評級C+,成都信息工程大學考情分析

成都信息工程大學(C) 考研難度&#xff08;☆☆&#xff09; 內容&#xff1a;23考情概況&#xff08;擬錄取和復試分析&#xff09;、院校概況、24專業目錄、23復試詳情、各專業考情分析、各科目考情分析。 正文1715字&#xff0c;預計閱讀&#xff1a;3分鐘 2023考情概況 …

Java實現求最大值

1 問題 接收用戶輸入的3個整數&#xff0c;如何將最大值作為結果輸出。 2 方法 采用“截圖文字代碼”的方式描述。 引入輸入包調用main()函數&#xff0c;提示并接收用戶輸入的3個整數&#xff0c;并交由變量a b c來保存。對接收的3個數據進行比較&#xff0c;先比較a和b&#…

原型 原型對象 原型鏈

在面向開發對象開發過程中對每一個實例添加方法&#xff0c;會使每一個對象都存在該添加方法造成空間浪費 通過對原型添加公共的屬性或方法&#xff0c;使所有實例對象都可訪問 原型為了共享公共的成員 prototype 原型: JS為每個構造函數提供一個屬性prototype(原型),它的值…

PostgreSQL數據庫初接觸

PostgreSQL默認端口為5432 windows下服務名為PostgreSQL-x64-10 10為版本 進程名為pg-ctl.exe 備份數據庫命令&#xff1a; pg_dump -h localhost -p 5432 -U postgres -f d:\20231124.dmp tcsl7//tcsl7為數據庫名 開始用-d 指定數據庫&#xff0c;后來提示沒-d參數 還…

在服務器復用他人的anaconda3(免安裝)

在服務器復用他人的anaconda3 1. 復制他人的anaconda3文件夾2. 修改配置文件3. 修改環境路徑和包路徑 1. 復制他人的anaconda3文件夾 cp -r /home/xxx/anaconda3 /home/your_username2. 修改配置文件 vim anaconda3/etc/profile.d/conda.sh # 替換原來的用戶名為自己的用戶名…

SELinux零知識學習二十八、SELinux策略語言之類型強制(13)

接前一篇文章:SELinux零知識學習二十七、SELinux策略語言之類型強制(12) 二、SELinux策略語言之類型強制 4. 類型規則 類型規則在創建客體或在運行過程中重新標記時指定其默認類型。在策略語言中定義了兩個類型規則: type_transtition在域轉換過程中標記行為發生時以及創…

jQuery 3.0 新增了哪些特性?(jQuery 3 所引入的那些最重要的變化)

文章目錄 前言簡介新增特性Use of requestAnimationFrame() for Animationsunwrap() 方法 有變更的特性data() 方法Deferred 對象SVG 文檔 已廢棄、已移除的方法和屬性廢棄 bind()、unbind()、delegate() 和 undelegate() 方法移除 load()、unload() 和 error() 方法移除 conte…

計算機應用基礎_錯題集_OutLook操作題_操作系統應用題_電子表格---網絡教育統考工作筆記005

6、(說明:考生單擊窗口下方的“打開[Outlook]應用程序”啟動Outlook) 按以下要求保存草稿。 收件人:test_xiao_ming@163.com

深眸科技聚焦AI機器視覺檢測,驅動3C電子行業集成創新實現新需求

隨著消費的升級及國家政策的助推&#xff0c;國內3C電子市場不斷擴大&#xff0c;行業實現高速發展。近年來&#xff0c;3C電子產品持續迭代&#xff0c;生產工藝也逐漸復雜化&#xff0c;相關生產線定位組裝、零部件檢測、整機產品檢測等環節&#xff0c;亟需使用具備較強適應…

C語言-字符串逆序

輸入一個字符串&#xff0c;對該字符串進行逆序&#xff0c;輸出逆序后的字符串。 輸入格式&#xff1a; 輸入在一行中給出一個不超過80個字符長度的、以回車結束的非空字符串。 輸出格式&#xff1a; 在一行中輸出逆序后的字符串。 輸入樣例&#xff1a; Hello World…

云原生系列Go語言篇-編寫測試Part 2

基準測試 確定代碼是快或慢非常復雜。我們不用自己計算&#xff0c;應使用Go測試框架內置的基準測試。下面來看??第15章的GitHub代碼庫??sample_code/bench目錄下的函數&#xff1a; func FileLen(f string, bufsize int) (int, error) {file, err : os.Open(f)if err ! …

【XSLVGL2.0】如何設置壁紙

XSLVGL2.0 開發手冊 XSLVGL2.0 Brief 1、概述2、設置方法 1、概述 設置壁紙使用的是LVGL默認的方式。一般而言&#xff0c;若非必要&#xff0c;建議不要去設置此功能&#xff0c;此功能對性能影響頗大。 2、設置方法 在main.c的 static int InitLvgl(void *cookie) 函數中…

舉個栗子!Quick BI 技巧(4):創建面積圖

面積圖又叫區域圖&#xff0c;是在折線圖的基礎之上形成的, 它將折線圖中折線與自變量坐標軸之間的區域使用顏色或者紋理填充&#xff0c;這樣一個填充區域我們叫做面積&#xff0c;顏色的填充也可以更好的突出趨勢信息。 有數據粉好奇如何使用 Quick BI 來制作面積圖&#xf…

NVMe-oF E-JBOF設計解析:WD RapidFlex網卡、OpenFlex Data24

OpenFlex Data24 NVMe-oF Storage Platform WD的SN840 NVMeSSD新品并沒有太吸引我注意&#xff0c;因為它還是PCIe 3.0接口的&#xff0c;要知道Intel的PCIe 4.0 SSD都已經推出了。 但上面這個NVMe-oF&#xff08;NVMe over Fabric&#xff09;EBOF&#xff08;區別于普通JBO…

FPGA程序前仿真和后仿真問題處理

參考鏈接&#xff1a;FPGA程序前仿真和后仿真問題處理 - 知乎