在一个大型体育场内举办了一场大型活动,由于疫情防控的需要,要求每位观众的必须间隔至少一个空位才允许落座。现在给出一排观众座位分布图,座位中存在已落座的观众,请计算出,在不移动现有观众座位的情况下,最多还能坐下多少名观众。
输入描述:
一个数组,用来标识某一排座位中,每个座位是否已经坐人。0 表示该座位没有坐人,1 表示该座位已经坐人。
输出描述:整数,在不移动现有观众座位的情况下,最多还能坐下多少名观众。
示例 1 输入输出示例仅供调试,后台判题数据一般不包含示例
输入 10001
输出 1
示例 2 输入输出示例仅供调试,后台判题数据一般不包含示例
输入 0101
输出 0
备注:1<= 数组长度 <=10000
public class FindSeats {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
int[] arr = new int[str.length()];
for (int i = 0; i < str.length(); i++) {
arr[i] = str.charAt(i) == '0' ? 0 : 1;
}
System.out.println(maxAudience(arr));
}
public static int maxAudience(int[] arr) {
int count = 0;
boolean lastWasEmpty = false; // 初始时,假定前一个座位是空的
for (int i = 0; i < arr.length; i++) {
int seat = arr[i];
if (i == 0 && seat == 0 && arr[i+1] == 0) { // 如果第一个座位是空的
arr[i] = 1;
count++; // 可以安排一个观众
continue;
}
if(i+1 ==arr.length && seat == 0 ){ // 如果最后一个座位是空的
arr[i] = 1;
count++;
break;
}
if (i+1 == arr.length && seat == 1) { // 如果当前是最后一个座位
break;
}
if (seat == 0) { // 如果当前座位是空的
if (arr[i+1] == 0 && arr[i-1] ==0) { // 如果前一个座位也是空的
arr[i] = 1;
count++; // 可以安排一个观众
} else {
continue;
}
} else { // 如果当前座位有人
continue;
}
}
return count;
}
}