Leetcode-Maximize Distance to Closest Person (与最近的那个人的距离)

Maximize Distance to Closest Person

第一次错误答案,
思路,从一个确定做的一个位置,分别得出与其他人的距离。
选取最短的。然后存起来,最大的比对。但是无法去除右边没有1的可能。


public static int maxDistToClosest(int[] seats) {
        int distance=0;
        int i = 0;
        int k = 0;
        int j = 0;
        while (i < seats.length) {

                if (seats[i] == 0) {
                    k=0;j=0;
                    while ( i + k < seats.length&&seats[i + k] != 1) {
                        k++;
                    }

                    while ( i - j >= 0&&seats[i - j] != 1 ) {
                        j++;
                    }
                    j = j > k ? k : j;
                    distance=j>distance?j:distance;
                }

            i++;

        }

        return distance;

    }

正确的分析:
用list存储每个1的位置

1.额外计算判断边界的距离

2、在中间的情况,用两个1之间的距离除以二。

package leetcode;

import java.util.LinkedList;
import java.util.List;

public class mm {
    public static int maxDistToClosest(int[] seats) {
        int MaxInstance = 0;
        List<Integer> list = new LinkedList<>();
        for (int i = 0; i < seats.length; i++) {
            if (seats[i] == 1) {
                // 获取每个1的位置
                list.add(i);
            }
        }
        //判断两边的距离
        MaxInstance = list.get(0);
        int end = seats.length-1-list.get(list.size() - 1);
        MaxInstance = MaxInstance > end ? MaxInstance : end;
        int temp;
        for (int i = 1; i < list.size(); i++) {
            temp = (list.get(i) - list.get(i - 1)) / 2;
            MaxInstance = MaxInstance > temp ? MaxInstance : temp;
        }
        return MaxInstance;
    }
    public static void main(String[] args) {
        int []nums= {1,0,0,1};
        System.out.println(maxDistToClosest(nums));
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值