Maximize Distance to Closest Person
第一次错误答案,
思路,从一个确定做的一个位置,分别得出与其他人的距离。
选取最短的。然后存起来,最大的比对。但是无法去除右边没有1的可能。
public static int maxDistToClosest(int[] seats) {
int distance=0;
int i = 0;
int k = 0;
int j = 0;
while (i < seats.length) {
if (seats[i] == 0) {
k=0;j=0;
while ( i + k < seats.length&&seats[i + k] != 1) {
k++;
}
while ( i - j >= 0&&seats[i - j] != 1 ) {
j++;
}
j = j > k ? k : j;
distance=j>distance?j:distance;
}
i++;
}
return distance;
}
正确的分析:
用list存储每个1的位置
1.额外计算判断边界的距离
2、在中间的情况,用两个1之间的距离除以二。
package leetcode;
import java.util.LinkedList;
import java.util.List;
public class mm {
public static int maxDistToClosest(int[] seats) {
int MaxInstance = 0;
List<Integer> list = new LinkedList<>();
for (int i = 0; i < seats.length; i++) {
if (seats[i] == 1) {
// 获取每个1的位置
list.add(i);
}
}
//判断两边的距离
MaxInstance = list.get(0);
int end = seats.length-1-list.get(list.size() - 1);
MaxInstance = MaxInstance > end ? MaxInstance : end;
int temp;
for (int i = 1; i < list.size(); i++) {
temp = (list.get(i) - list.get(i - 1)) / 2;
MaxInstance = MaxInstance > temp ? MaxInstance : temp;
}
return MaxInstance;
}
public static void main(String[] args) {
int []nums= {1,0,0,1};
System.out.println(maxDistToClosest(nums));
}
}