即可,对于同值的哈希其下标,访问一次删掉即可。
class Solution {
public:
int dp[50005];
int minJumps(vector<int>& a) {
int n=a.size();
int IN=0x3f3f3f;
memset(dp,0x3f3f3f,sizeof dp);
dp[0]=0;
unordered_map<int,vector<int> >p;
for(int i=0;i<n;i++)p[a[i]].push_back(i);
queue<int>q;
q.push(0);
while(!q.empty()){
int id=q.front();
q.pop();
if(id-1>=0){
if(dp[id-1]>dp[id]+1){
dp[id-1]=dp[id]+1;
q.push(id-1);
}
}
if(id+1<n){
if(dp[id+1]>dp[id]+1){
dp[id+1]=dp[id]+1;
q.push(id+1);
}
}
for(int i:p[a[id]]){
if(dp[i]>dp[id]+1){
dp[i]=dp[id]+1;
q.push(i);
}
}
}
return dp[n-1];
}
};

京公网安备 11010502036488号