/**
* @brief 在一段路径上,一共有N(N ∈ [1, 100000])座路灯,已知路灯间距均为100m。现给出每个路灯的照亮范围light[i],且照亮范围在区间[1, 100 * N]内。求出该段路中,总共未照亮的路段长度。
* N = 6, light[] = [50,20,80,20,30,300]
*/
int lengthOfUnlitSection(const std::vector<int>& lightV)
{
std::vector<int>::iterator itr;
std::unique_ptr<int[]> darkLengthV(new int[lightV.size()-1]());
int right = 0;
for(int i = 0;i < lightV.size();++i)
{
//考虑每个路灯范围的情况
if ( lightV[i] > 100 )
{
//找此路灯两侧
int left = lightV[i] - 100;//[50,20,80,20,30,300]
for(int k = i-1;k >0;--k)//找此路灯左侧
{
if ( left-100 >= 0 )
{
darkLengthV[k-1] = (darkLengthV[k-1] > 0 ? 0:darkLengthV[k-1]);
left -= 100;
}
else
{
break;
}
}
//找此路灯右侧 [50,20,200,20,30,50]
int index = i;
int right = lightV[i]-100;
for(int k = index+1;k < lightV.size();++k)
{
if ( right >= 0 )
{
i += 1;
right -= 100;
}
else
{
break;
}
}
}
if ( i+1 < lightV.size() && (lightV[i] + lightV[i+1] < 100) )
{
darkLengthV[i] = 100 - ( lightV[i] + lightV[i+1] );
}
}
int len = 0;
for(int j = 0; j < lightV.size()-1;++j)
{
len += darkLengthV[j];
}
return len;
}
算法之路灯问题
最新推荐文章于 2023-06-22 01:07:07 发布