生命不止。规划不止,我越来越喜欢动态规划了
在一排座位( seats
)中,1
代表有人坐在座位上,0
代表座位上是空的。
至少有一个空座位,且至少有一人坐在座位上。
亚历克斯希望坐在一个能够使他与离他最近的人之间的距离达到最大化的座位上。
返回他到离他最近的人的最大距离。
注意:但是要特别处理头和尾,对于中间的空位要考虑两边的人,所以需要空位处以2,而头尾只要考虑一边就可以了,不需要折半。
示例 1:
class Solution {
public int maxDistToClosest(int[] seats) {
int []count=new int[seats.length];
count[0]=1-seats[0];
for(int i=1;i<seats.length;i++)
{
if(seats[i]==0)
{
if(count[i-1]!=0)
count[i]=count[i-1]+1;
else
count[i]=1;
}
}
int pre=0;
int post=0;
if(seats[0]==0)
{
int c=0;
while(seats[c]==0&&c<seats.length)
{
pre++;
c++;
}
}
if(seats[seats.length-1]==0)
{
int c=seats.length-1;
while(seats[c]==0&&c>=0)
{
post++;
c--;
}
}
Arrays.sort(count);
return Math.max((count[seats.length-1]+1)/2,Math.max(post,pre));
}
}
输入:[1,0,0,0,1,0,1]
输出:2
解释:
如果亚历克斯坐在第二个空位(seats[2])上,他到离他最近的人的距离为 2 。
如果亚历克斯坐在其它任何一个空位上,他到离他最近的人的距离为 1 。
因此,他到离他最近的人的最大距离是 2 。
示例 2:
输入:[1,0,0,0]
输出:3
解释:
如果亚历克斯坐在最后一个座位上,他离最近的人有 3 个座位远。
这是可能的最大距离,所以答案是 3 。
提示:
1 <= seats.length <= 20000
seats
中只含有 0 和 1,至少有一个0
,且至少有一个1
。