【华为OD机试真题 JAVA】 找车位【2022 Q4 | 100分】
前言
《华为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);
    }
}
				       
			          
