1340. 跳跃游戏 V (字节一面)
树形dp,记忆化搜索
面试官提示了很多,才敲出来
public int maxJumps(int[] arr, int d) {
int ans = 1;
HashMap<Integer, Integer> hash = new HashMap<>();
for (int i = 0; i < arr.length; i++) {
ans = Math.max(dfs(arr,d,i,hash),ans);
}
return ans;
}
public int dfs(int[] arr, int d, int index, HashMap<Integer,Integer> hash){
if(hash.containsKey(index)) return hash.get(index);
int ans = 1;
for(int i=index-1;i>=0&&index-i<=d&&arr[i]<arr[index];i--){
ans = Math.max(dfs(arr,d,i,hash)+1,ans);
}
for(int i=index+1;i<arr.length&&i-index<=d&&arr[i]<arr[index];i++){
ans = Math.max(dfs(arr,d,i,hash)+1,ans);
}
hash.put(index,ans);
return ans;
}