解题思路:
参照大佬的题解,每次添加的时候一共有三种情况
1.左右都为空
2.左为空或者右为空
3.左右都不为空
接着跟新link数组即可
class Solution {
public:
int maxz;
int findLatestStep(vector<int>& arr, int m) {
maxz=arr.size();
vector<int> g(maxz+3,1);
int ans=-1;
int link[maxz+10];
memset(link,0,sizeof(link));
int num[maxz+10];
memset(num,0,sizeof(num));
for(int i=0;i<maxz;i++)
{
int h=arr[i];
if(link[h-1]&&link[h+1])
{
int l=link[h-1],r=link[h+1];
link[l]=r;
link[r]=l;
++num[r-l+1];
--num[h-l];
--num[r-h];
if(num[m]) ans=i+1;
}
else if(link[h-1])
{
int l=link[h-1];
link[l]=h;
link[h]=l;
--num[h-l];
++num[h-l+1];
if(num[m]) ans=i+1;
}
else if(link[h+1])
{
int r=link[h+1];
link[r]=h;
link[h]=r;
--num[r-h];
++num[r-h+1];
if(num[m]) ans=i+1;
}
else
{
link[h]=h;
++num[1];
if(num[m]) ans=i+1;
}
}
return ans;
}
};