日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[Leedcode][JAVA][第45题][跳跃游戏 II][贪心算法]

發(fā)布時間:2023/12/10 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Leedcode][JAVA][第45题][跳跃游戏 II][贪心算法] 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

【問題描述】[Leedcode][JAVA][第45題][跳躍游戲 II]

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

【解答思路】

1. 動態(tài)規(guī)劃 超時

第 1 步:設(shè)計狀態(tài) int[] temp = new int[len];
第 2 步:狀態(tài)轉(zhuǎn)移方程

  • 沒跳過 temp[j]=temp[i]+1
  • 跳過 temp[j] = Math.min( temp[j],temp[i]+1 );
    第 3 步:考慮初始化
    temp數(shù)組置0 第一跳
    第 4 步:考慮輸出
    temp[len-1]
    時間復(fù)雜度:O(N^2) 空間復(fù)雜度:O(N)
public int jump(int[] nums) {int len = nums.length;if(len == 0 ||len ==1){return 0;}int[] temp = new int[len];//輔助數(shù)組置0for(int i =0; i<len ;i++){temp[i] = 0;}//初始化第一跳for(int i =1; (i<=nums[0]) && (i<len);i++){temp[i]++;}//動態(tài)規(guī)劃for(int i =1; i<len-1 ;i++){//注意邊界for(int j=i+1; (j<=nums[i]+i)&& (j<=len-1);j++){//跳過 比較當(dāng)前到達j位所在步數(shù) 與 起跳格i所在步數(shù)+1 之間的大小if(temp[i]+1 < temp[j]){temp[j]=temp[i]+1 ;}//沒跳過 則是起跳格i所在步數(shù)+1if(temp[j]==0){temp[j]=temp[i]+1;}}}return temp[len-1];}
2. 反向查找位置 貪心
  • 「貪心」地選擇距離最后一個位置最遠的那個位置,也就是對應(yīng)下標最小的那個位置。
  • 從左到右遍歷數(shù)組,選擇第一個滿足要求的位置。
    時間復(fù)雜度:O(N^2) 空間復(fù)雜度:O(1)
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;}
3. 正向查找可到達的最大位置 降低時間復(fù)雜度

時間復(fù)雜度:O(N) 空間復(fù)雜度:O(1)

public int jump(int[] nums) {int end = 0;int maxPosition = 0; int steps = 0;for(int i = 0; i < nums.length - 1; i++){//找能跳的最遠的maxPosition = Math.max(maxPosition, nums[i] + i); if( i == end){ //遇到邊界,就更新邊界,并且步數(shù)加一end = maxPosition;steps++;}}return steps; }

【總結(jié)】

1.貪心算法,每次找局部最優(yōu),最后達到全局最優(yōu)
2. 不要死板 想好方法 總有辦法實現(xiàn) 巧妙更新邊界
3. 畫圖思考 想清楚再動手

參考鏈接:https://leetcode-cn.com/problems/jump-game-ii/solution/xiang-xi-tong-su-de-si-lu-fen-xi-duo-jie-fa-by-10/

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的[Leedcode][JAVA][第45题][跳跃游戏 II][贪心算法]的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。