前言
《华为OD笔试真题 JAVA》 专栏含华为OD机试真题JAVA实现、华为面试题、牛客网华为专栏真题。
如果您正在准备华为的面试,或者华为od的机会,希望可以帮到您! PS:文中答案仅供参考,不可照抄
■ 题目描述
【找车位】
停车场有一横排车位,0代表没有停车,1代表有车。至少停了一辆车在车位上,也至少有一个空位没有停车。
为了防剐蹭,需为停车人找到一个车位,使得距停车人的车最近的车辆的距离是最大的,返回此时的最大距离。
输入描述
1、一个用半角逗号分割的停车标识字符串,停车标识为0或1,0为空位,1为已停车。
2、停车位最多100个。
输出描述
输出一个整数记录最大距离。
示例1 输入输出示例仅供调试,后台判题数据一般不包含示例
输入
1,0,0,0,0,1,0,0,1,0,1
输出
2
说明
当车停在第3个位置上时,离其最近的的车距离为2(1到3)。
当车停在第4个位置上时,离其最近的的车距离为2(4到6)。
其他位置距离为1。
因此最大距离为2。
JAVA代码实现1:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String line = sc.next();
String[] place = line.split(",");
int count = 0, max = 0, left = 0;
for (String s : place) {
if (s.equals("0")) {
count++;
} else {
if (left == 0) {
max = count * 2;
left = 1;
} else {
max = Math.max(max, count);
}
count = 0;
}
}
if (place[place.length - 1].equals("0")) {
max = Math.max(max, count * 2);
} else {
max = Math.max(max, count);
}
System.out.println((max + 1) / 2);
}
}
JAVA代码实现2:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] input = sc.nextLine().split(",");
int[] arr = new int[input.length];
for (int i = 0; i < input.length; i++) {
arr[i] = Integer.parseInt(input[i]);
}
int max = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] == 1) {
continue;
}
max = Math.max(max, calcDistance(arr, i));
}
System.out.println(max);
}
private static int calcDistance(int[] arr, int idx) {
int left = 0;
int right = 0;
for (int i = 0; i < idx; i++) {
if (arr[i] == 1) {
left = i;
}
}
for (int i = idx; i < arr.length; i++) {
if (arr[i] == 1) {
right = i;
break;
}
}
return Math.min(idx - left, right - idx);
}
}