【华为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);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值