C++ 代码
#include <bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int n;
vector<int>cnt;//cnt存所有0所在的位置
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
if(t[i]==0) cnt.push_back(i);//如果是0,则存储0的位置
}
int y=0;
for(int i=1;i<=n;i++)
{
if((abs(i-cnt[y])>=abs(i-cnt[y+1])&&y+1<cnt.size())) y++;
/*
cnt[y] -->当前“认为”最近0的距离,可能不是
cnt[y+1]->当前“认为”最近0的距离下一个0的位置
abs(i-cnt[y]) -->当前“认为”最近0的距离到i的距离
abs(i-cnt[y+1])->当前“认为”最近0的距离下一个0的位置到i的距离
如果abs(i-cnt[y])大于abs(i-cnt[y+1]),代表当前“认为”最近0的距离到i的距离是有新的更新了,而它就是下一个0的位置(因为如果是前去的,则肯定会增加,如果是后面第两个,肯定也会更增加)所以y++
*/
cout<<abs(i-cnt[y])<<' ';//输出i到最近0的距离
}
return 0;
}