找车位

标题:找车位 | 时间限制:1秒 | 内存限制:32768K | 语言限制:不限

停车场有一横排车位,0代表没有停,1代表有车。至少停了一辆车在车位上,也至少有一个空位没有停车。

为了防剐蹭,需为停车人找到一个车位,使得距停车人的车最近的车辆的距离是最大的,返回此时的最大距离。

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String str = input.next();
        String[] strings = str.split(",");
        List<Integer> parkingList = new ArrayList<>();
        for (String num : strings) {
            parkingList.add(Integer.parseInt(num));
        }
        List<Integer> canParkingList = new ArrayList<>();
        for(int i =0;i<parkingList.size();i++){
            if(parkingList.get(i)==0){
                canParkingList.add(i);
            }
        }
        int maxLength = 0;
        for (int index : canParkingList) {
            int num = 100;
            for (int nIndex=0 ;nIndex<parkingList.size();nIndex++) {
                if (parkingList.get(nIndex) == 0) {
                    continue;
                }
                int m = index > nIndex ? index - nIndex : nIndex - index;
                num = num > m ? m : num;
            }
            maxLength = maxLength > num ?maxLength:num;
        }
        System.out.println(maxLength);

    }
}
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 105;
int main()
{
    int a[maxn], pre[maxn], drx[maxn];
    string s;
    while (cin>>s)
    {
        int idx = 0;
        for (int i = 0; i < s.length(); i++)
        {
            if (s[i] >= '0'&&s[i]<='9')
            {
                a[idx++] = s[i] - '0';
            }
        }
        int last = -1;
        for (int i = 0; i < idx; i++)
        {
            if (last != -1)
            {
                pre[i] = i - last;
            }
            else
            {
                pre[i] = maxn;
            }
            if (a[i] == 1)
            {
                last = i;
            }
        }
        last = -1;
        for (int i = idx - 1; i >= 0; i--)
        {
            if (last != -1)
            {
                drx[i] = last-i;
            }
            else
            {
                drx[i] = maxn;
            }
            if (a[i] == 1)
            {
                last = i;
            }
        }
        int ans = 0;
        for (int i = 0; i < idx; i++)
        {
            if (a[i] == 1) continue;
            int x = std::min(pre[i], drx[i]);
            if (x > ans)
            {
                ans = x;
            }
        }
        cout << ans << endl;
    }
    return 0;
}
#include<iostream>
#include<vector>
using namespace std;
int main() {
    string in;
    while (cin >> in) {
        int len = (in.length() + 1) / 2;
        vector<int>disl(len, 101);
        vector<int>disr(len, 101);
        int dis = 101;
        for (int i = 0; i < len; ++i) {
            if (in[i * 2] == '1')dis = 1;
            else if (in[i * 2] == '0') {
                disl[i] = dis;
                dis++;
            }
        }
        dis=101;
        for (int i = len - 1; i >= 0; --i) {
            if (in[i * 2] == '1')dis = 1;
            else if (in[i * 2] == '0') {
                disr[i] = dis;
                dis++;
            }
        }
        int ma = 1;
        for (int i = 0; i < len; ++i) {
            int temp = min(disl[i], disr[i]);
            if(temp!=101)ma = max(ma, temp);
        }
        cout << ma << endl;
    }
    return 0;
}



全部评论

相关推荐

点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务