即可,对于同值的哈希其下标,访问一次删掉即可。
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]; } };