成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

LeetCode題解之跳躍游戲

開發 前端
給定一個非負整數數組 nums ,你最初位于數組的 第一個下標 。數組中的每個元素代表你在該位置可以跳躍的最大長度。判斷你是否能夠到達最后一個下標。

[[387128]]

前言

周五了,和大家玩個跳躍游戲

題目

給定一個非負整數數組 nums ,你最初位于數組的 第一個下標 。

數組中的每個元素代表你在該位置可以跳躍的最大長度。

判斷你是否能夠到達最后一個下標。

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

解釋:可以先跳 1 步,從下標 0 到達下標 1, 然后再從下標 1 跳 3 步到達最后一個下標。

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

解釋:無論怎樣,總會到達下標為 3 的位置。但該下標的最大跳躍長度是 0 , 所以永遠不可能到達最后一個下標。

分析

簡單分析一下,由題目得出,要想到達最后一個下標,得滿足兩個條件:

  • 1、假設每個位置都能跳到,那么我們只需要遍歷數組,看看有沒有位置能直接通過這個位置上的數字跳到結尾。

比如[2,3,2,1,4],我們遍歷數字,看看哪個位置可以跳到最后,可以發現第三個位置的數字是2,所以可以通過第三個位置跳到最后的下標,數組成立。

  • 2、上述假設成立的還有個條件就是 每個位置是否都能跳到。

比如[2,0,2,1,4],按照上面的邏輯,第三個位置是可以跳到最后下標。但是,第三個位置是否能到達呢?如果第三個位置都到不了,那又何談最后的位置呢?在這個例子中,第一個位置為2,是可以跳到第三個位置的。

如果改成[1,0,2,1,4],第三個位置就到不了了。

結合上述分析,我們可以得出以下解法:

  1. public boolean canJump(int[] nums) { 
  2.         //能到達的最大位置k 
  3.         int k =0; 
  4.         //遍歷數組 
  5.         for(int i=0;i<nums.length;i++){ 
  6.             //如果達不到i位置,就直接返回false 
  7.             if(k<i) return false
  8.             k=Math.max(k,i+nums[i]); 
  9.         } 
  10.         return true
  11.     } 

也可以在每次獲取k之后再判斷一次,如果滿足條件就直接返回,減少循環次數:

  1. public boolean canJump(int[] nums) { 
  2.         //能到達的最大位置k 
  3.         int k =0; 
  4.         //獲取數組長度 
  5.         int l = nums.length; 
  6.         //遍歷數組 
  7.         for(int i=0;i<l;i++){ 
  8.             if(k<i) return false
  9.             k=Math.max(k,i+nums[i]); 
  10.             if (k >= l-1) { 
  11.              return true
  12.             } 
  13.         } 
  14.         return false
  15.     } 

這種在到了某個位置,作出當前最好的選擇 的算法一般稱為貪心算法。

貪心算法的思路就是把問題分為若干個子問題,然后針對每個子問題進行局部求解,最終得到整個問題的解。

貪心算法主要有兩個特點:

  • 總是作出在當前看來最好的選擇。
  • 從局部的最優選擇到整體最優解。

所以“貪心”的意思大概就是目光短淺,只看到到眼前的最好,而不會從整體的角度思考。

雖然不能保證最后的解法是最優的,但是這種辦法確實是能夠解決問題的,將大問題化解成小問題,小問題好好解決。

那有什么時候會有更好的解呢?這就引出 動態規劃了。

動態規劃的思想同樣是解決子問題,但是每一步的選擇都會依賴于相關的子問題解,所以有時候的復雜問題選擇動態規劃能有更好的解法,因為他對于子問題間的相關性更強。

就等下次聊了,拜拜。

時間復雜度

O(n)

空間復雜度

O(1)

參考

https://blog.csdn.net/qq_42363032/article/details/103597453

https://leetcode-cn.com/problems/jump-game/submissions/

本文轉載自微信公眾號「碼上積木」,作者積木zz 。轉載本文請聯系碼上積木公眾號。

 

責任編輯:武曉燕 來源: 碼上積木
相關推薦

2021-01-21 08:23:29

鏈表單鏈表循環鏈表

2021-01-22 08:30:50

LeetCode數字數組

2021-02-04 08:18:53

LeetCode鏈表

2021-01-28 08:20:41

鏈表空間復雜度

2021-03-22 08:23:29

LeetCode二叉樹節點

2021-11-16 11:32:55

開發跳躍游戲

2021-02-03 13:23:42

鏈表倒數結點

2020-01-17 18:40:38

Python游戲代碼

2021-01-15 08:19:26

二維數組LeetCode

2021-03-02 08:21:58

LeetCode括號

2021-03-17 08:19:22

二叉樹LeetCode

2012-07-11 10:09:20

Android惡意軟件

2014-09-01 10:36:35

個推推送

2021-12-31 09:01:44

LeetCode 羅馬數字四數之和

2017-03-29 11:08:36

游戲日志分析

2021-12-01 09:00:57

LeetCode回文數字算法

2021-08-03 10:24:59

數據跳躍鏈表結構

2022-10-12 09:01:11

動態規劃算法題

2022-02-11 09:42:21

Swift開發語言LeetCode

2012-05-15 13:57:41

HTML5
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 午夜精品一区二区三区在线 | 特级生活片 | 国产91av视频在线观看 | 亚洲免费视频播放 | 国产精品国产a级 | 久久亚洲一区二区三 | 日本不卡一区二区三区 | 中文字幕 在线观看 | 日韩欧美一级 | 成人影院在线观看 | 91久久久久久久久久久久久 | 国产专区在线 | 国产一区二区影院 | 亚洲精品久久久久久国产精华液 | 欧美日日 | 国产成人免费视频网站视频社区 | 蜜桃一区二区三区 | 国产片一区二区三区 | 天天天天操 | 久久午夜精品 | 欧美xxxⅹ性欧美大片 | 一区二区三区av | 亚洲综合大片69999 | 黄页网址在线观看 | 天天色天天射天天干 | 久久中文一区二区 | 蜜臀久久99精品久久久久野外 | 911精品国产 | 九九九视频精品 | 亚洲人久久 | 中国一级特黄真人毛片免费观看 | 欧美黑人激情 | 欧美成人精品在线 | 99热这里都是精品 | 在线看一区二区三区 | 一级全黄视频 | 成人av观看 | 国产亚洲精品综合一区 | 久热电影| 在线观看免费毛片 | 美女在线视频一区二区三区 |