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 步到達最後乙個位置。示例二 輸入 ...