Leetcode 5331 跳躍遊戲 V

2021-10-02 12:04:46 字數 1168 閱讀 1304

oj

題意:給定乙個陣列,陣列的值代表乙個矩形的高度,我們可以任意選擇乙個矩形當做起點,然後進行跳躍,每次跳躍的最遠距離為d,可以向左或者向右跳,但是不能跳出陣列。在乙個位置上要想跳到另外乙個位置,中間所有的矩形都要比起跳位置的矩形矮,且目標矩形也比起跳矩形矮,問最多訪問多少個下標。

解:乙個動態規劃的題,dp[i]表示在下標i位置最多能到達的下標數量,dp[i] = max(dp[k]+1,dp[i]),k代表當前i位置能到達的其他下標。看似都可以了,但是有個問題,我們如何保證dp[k]的值是已經求過了的?我們肯定不能按照順序關係來求dp陣列的值,因為每個值之間並不是順序關係,而是高度關係。所以我們要保證矮的先求,排個序就搞定了。

public

intmaxjumps

(int

arr,

int d)

// 按照資料大小進行排序,但是記錄了原下標位置

arrays.

sort

(as, comparator.

comparingint

(value -

> value.data));

int[

] dp =

newint

[arr.length]

; arrays.

fill

(dp,1)

;int ans =0;

for(

int i =

0; i < as.length; i++

) dp[index]

= math.

max(dp[index]

, dp[j]+1

);}for

(int j = index +

1; j <= index + d; j++

) dp[index]

= math.

max(dp[index]

, dp[j]+1

);} ans = math.

max(dp[index]

, ans);}

return ans;

}// 乙個用來存放原陣列下標的類

class

a}

當然也可以不進行排序,可以用dfs加記憶化解決,但是dp他不香嗎

python lintcode116 跳躍遊戲

給出乙個非負整數陣列,你最初定位在陣列的第乙個位置。陣列中的每個元素代表你在那個位置可以跳躍的最大長度。判斷你是否能到達陣列的最後乙個位置。這個問題有兩個方法,乙個是貪心和動態規劃。貪心方法時間複雜度為o n 動態規劃方法的時間複雜度為為o n 2 我們手動設定小型資料集,使大家可以通過測試的兩種方...

LeetCode 跳躍遊戲

給定乙個非負整數陣列,你最初位於陣列的第乙個位置。陣列中的每個元素代表你在該位置可以跳躍的最大長度。判斷你是否能夠到達最後乙個位置。示例 1 輸入 2,3,1,1,4 輸出 true 解釋 從位置 0 到 1 跳 1 步,然後跳 3 步到達最後乙個位置。示例 2 輸入 3,2,1,0,4 輸出 fa...

leetcode 跳躍遊戲

給定乙個非負整數陣列,你最初位於陣列的第乙個位置。陣列中的每個元素代表你在該位置可以跳躍的最大長度。判斷你是否能夠到達最後乙個位置。示例 1 輸入 2,3,1,1,4 輸出 true 解釋 我們可以先跳 1 步,從位置 0 到達 位置 1,然後再從位置 1 跳 3 步到達最後乙個位置。示例二 輸入 ...