1.创建二维数组tmp 来维护柱长排序的信息。
2.创建一维数组 dp 来维护每个 从每个 index 对应的柱子开始,能到达的柱子个数。(根据柱长排序顺序来一个一个的求,由高柱子往低柱子跳的逻辑。)
class Solution {
public:
int maxJumps(vector<int>& arr, int d) {
int n=arr.size();
vector<vector<int>> tmp;
for(int i=0;i<arr.size();i++){
tmp.push_back({arr[i],i});
}
sort(tmp.begin(),tmp.end());
vector<int> dp(n,0);
int ans=0;
for(int i=0;i<n;i++){
int index=tmp[i][1];
dp[index]=1;
for(int j=index+1;j<=index+d&&j<n;j++){
if(arr[j]>=arr[index]) break;
else dp[index]=max(dp[index],dp[j]+1);
}
for(int k=index-1;k>=index-d&&k>=0;k--){
if(arr[k]>=arr[index]) break;
else dp[index]=max(dp[index],dp[k]+1);
}
ans=max(ans,dp[index]);
}
return ans;
}
};