首页 > 其他分享 >Leetcode 849. 到最近的人的最大距离

Leetcode 849. 到最近的人的最大距离

时间:2023-08-22 20:34:36浏览次数:42  
标签:last int max 距离 849 seats Leetcode first

题目描述

给你一个数组 seats 表示一排座位,其中 seats[i] = 1 代表有人坐在第 i 个座位上,seats[i] = 0 代表座位 i 上是空的(下标从 0 开始)。
至少有一个空座位,且至少有一人已经坐在座位上。
亚历克斯希望坐在一个能够使他与离他最近的人之间的距离达到最大化的座位上。
返回他到离他最近的人的最大距离。
** 示例1 **

** 示例2 **

代码

大佬链接
(自己还是没有思路啊,哭了,倒是能想到遍历,但后面还是没啥思路,可能多练练就好了,嗯,菜就多练练)

class Solution {
    public int maxDistToClosest(int[] seats) {
        int first = -1, last = -1;
        int d = 0, n = seats.length;
        for(int i=0;i<n;++i){
            if(seats[i] == 1){
                if(last != -1)
                {
                    d = Math.max(d, i - last);
                   
                }
                 if(first == -1)
                {
                    first = i;
                }
                last = i;
            }
        }
        return Math.max(d/2, Math.max(first, n - last - 1));
    }
}

思路

个人思路:

遍历确定各点(乘客)的位置,然后计算没两点之间距离,找大的,emm,我试试代码

class Solution {
    public int maxDistToClosest(int[] seats) {
        int n = seats.length, z = 0;
        int[] x = new int[n];
        for(int i = 0;i < n;i++){
            if(seats[i] == 1){
                x[z] = i;
                z++;
            }
        }
        intmax= x[z] - x[z-1];
        for(int i = z-1;i >= 0; i--){
            if(i >= 1){
                int y = x[i]-x[i-1];
                if(y > max){
                    max = y;
                }
            }
        }
        return max/2;
    }
}

啊,case1过了,但没考虑只有一个乘客的情况,多考虑考虑应该还是能写出来吧(我也很没信心,毕竟我从菜的一批,看着垃圾代码就知道了)

大神思路
啊,这里没什么好讲的啊,直接粘过来
我们定义两个变量 firstlast 分别表示第一个人和最后一个人的位置,用变量 d 表示两个人之间的最大距离。

然后遍历数组 seats,如果当前位置有人,如果此前 last 更新过,说明此前有人,此时更新 d=max⁡(d,i−last);如果此前 first 没有更新过,说明此前没有人,此时更新 first=i。接下来更新 last=i。

最后返回 max⁡(first,n−last−1,d/2)即可。

大佬不愧是大佬,思路清晰,代码简单!!

标签:last,int,max,距离,849,seats,Leetcode,first
From: https://www.cnblogs.com/benfang/p/17649616.html

相关文章

  • 数学——点到线段的最短距离
    点到线段最短距离的运算与点到直线的最短距离的运算二者之间存在一定的差别,即求点到线段最短距离时需要考虑参考点在沿线段方向的投影点是否在线段上,若在线段上才可采用点到直线距离公式。通俗的说,我们按照求点到直线的距离作垂线后,交点不一定在线段上。如图\(1\)所示。通常......
  • LeetCode.钥匙和房间
    1.代码:有 n 个房间,房间按从 0 到 n-1 编号。最初,除 0 号房间外的其余所有房间都被锁住。你的目标是进入所有的房间。然而,你不能在没有获得钥匙的时候进入锁住的房间。当你进入一个房间,你可能会在里面找到一套不同的钥匙,每把钥匙上都有对应的房间号,即表示钥匙可以打开的房......
  • Leetcode 两个队列实现栈 swift
    queue1 是最后生成的栈queue2是临时队列,把新进来的先放进去,再把queue1里的数据从头到尾读进去,然后互换classMyStack{varqueue1:[Int]=[]varqueue2:[Int]=[]init(){}funcpush(_x:Int){queue2.append(x)whil......
  • LeetCode338.比特位计数
    先以2,3为例,它们的二进制分别是10、11,可以看到,忽略其二进制中最高位的1之后,这组数中二进制位为1的数量分别和数字0,1中二进制位为1的数量相同,再以4,5,6,7为例,他们的二进制分别是100、101、110、111,忽略其二进制中最高位的1之后,这组数中二进制位为1的数量分别和数字0,1,2,3中二进制位为1的......
  • LeetCode-164. 最大间距(Java)
    一、前言......
  • 为啥网线都会限制传输距离为100米?
    下午好,我的网工朋友。大部分网工都经历过网络布线这件事儿吧。无论是五类双绞线,还是六类双绞线,传输距离都是100米。而且,在综合布线规范中,水平布线不能超过90米,链路总长度不能超过100米。换句话说,“100米”是有线以太网布线的一个极限。这个说法到底怎么来的,有啥依据,具体施工现场怎......
  • Leetcode 59. 螺旋矩阵 II && 剑指 Offer 29. 顺时针打印矩阵
    这两个题非常相似,但是前者较为简单,后者较难。由于前者访问的矩阵是方阵,因此可以通过迭代去做(因为方阵每次迭代,长和宽缩水的大小是一样的,但是矩阵不可以,因为矩阵最后一次迭代,长和宽的缩水不一定一样)classSolution{public:vector<vector<int>>generateMatrix(intn){......
  • Leetcode 242. 有效的字母异位词(Valid anagram)
    题目链接......
  • #yyds干货盘点# LeetCode程序员面试金典:完全二叉树的节点个数
    题目:给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。 示例1:输入:r......
  • LeetCode 周赛上分之旅 #40 结合特征压缩的数位 DP 问题
    ⭐️本文已收录到AndroidFamily,技术和职场问题,请关注公众号[彭旭锐]和BaguTreePro知识星球提问。学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越抽象,它能覆盖的问题域就越广,理解难度也更复杂。在这个专栏里,小彭与你分享每场LeetCode周赛的解题报告,一......