【849. 到最近的人的最大距离】

news2024/11/27 11:27:17

来源:力扣(LeetCode)

描述:

给你一个数组 seats 表示一排座位,其中 seats[i] = 1 代表有人坐在第 i 个座位上,seats[i] = 0 代表座位 i 上是空的(下标从 0 开始)。

至少有一个空座位,且至少有一人已经坐在座位上。

亚历克斯希望坐在一个能够使他与离他最近的人之间的距离达到最大化的座位上。

返回他到离他最近的人的最大距离。

示例 1:
1

输入:seats = [1,0,0,0,1,0,1]
输出:2
解释:
如果亚历克斯坐在第二个空位(seats[2])上,他到离他最近的人的距离为 2 。
如果亚历克斯坐在其它任何一个空位上,他到离他最近的人的距离为 1 。
因此,他到离他最近的人的最大距离是 2

示例 2:

输入:seats = [1,0,0,0]
输出:3
解释:
如果亚历克斯坐在最后一个座位上,他离最近的人有 3 个座位远。
这是可能的最大距离,所以答案是 3

示例 3:

输入:seats = [0,1]
输出:1

提示:

  • 2 <= seats.length <= 2 * 104
  • seats[i] 为 0 或 1
  • 至少有一个 空座位
  • 至少有一个 座位上有人

方法:双指针 + 贪心

思路与算法

题目给出一个下标从 0 开始,长度为 n 的数组 seats,其中 seats[i] = 1 表示有人坐在第 i 个位置上,在该题解中我们称之为「有人座位」,seats[i] = 0 表示第 i 个座位为空,称之为「无人座位」,并且题目数据保证至少有一个「有人座位」和「无人座位」。现在我们需要找到一个「无人座位」使得该位置与距离该位置最近的「有人位置」之间的距离最大,并返回该值。

首先假设已经确定了我们所选择的「无人座位」i 的左和右离它最近的「有人座位」分别为座位 l 和 r,0 ≤ l < i < r < n 。那么此时座位 i 的离其位置最近的人的距离 dmin = min⁡ {i − l, r − i} ≤ ⌊ r − l 2 \frac{ r−l}{2} 2rl⌋ ,其中当 i=⌊ r + l 2 \frac{ r+l}{2} 2r+l⌋ 时取到等号。所以对于两个相邻的「有人座位」,我们在中间就坐一定是最优的。因此我们可以用「双指针」来找到每一对相邻的有人座位,并计算若在其中间就坐能得到的最大间隔距离。

以上的讨论是建立在我们选择的「无人座位」的左右都存在「有人座位」的情况。对于边缘的「无人座位」,即其某一侧不存在「有人座位」:

  • 若左边存在边缘的「无人座位」,则此时为了使距离其最近的右边的「有人座位」最远,我们应该尽可能的往左边坐,即坐在第一个位置。
  • 若右边存在边缘的「无人座位」,则此时为了使距离其最近的左边的「有人座位」最远,我们应该尽可能的往右边坐,即坐在第最后一个位置。

最后返回全部情况中能得到的最大距离即可。

代码:

class Solution {
public:
    int maxDistToClosest(vector<int>& seats) {
        int res = 0;
        int l = 0;
        while (l < seats.size() && seats[l] == 0) {
            ++l;
        }
        res = max(res, l);
        while (l < seats.size()) {
            int r = l + 1;
            while (r < seats.size() && seats[r] == 0) {
                ++r;
            }
            if (r == seats.size()) {
                res = max(res, r - l - 1);
            } else {
                res = max(res, (r - l) / 2);
            }
            l = r;
        }
        return res;
    }
};

时间 4ms 击败 99.58%使用 C++ 的用户
内存 16.18MB 击败 73.75%使用 C++ 的用户
复杂度分析

  • 时间复杂度:O(n),其中 n 为数组 seats 的长度。
  • 空间复杂度:O(1),仅使用常量空间。
    author:力扣官方题解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/911429.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3招教你释放储存空间:iPhone手机内存不足怎样清理最彻底

无论是什么手机&#xff0c;一旦使用时间长了&#xff0c;手机就会产生大量不必要的文件&#xff0c;从而导致手机内存不足&#xff0c;运行缓慢、卡顿。想要删除没用的文件该怎么做&#xff1f;iPhone手机内存不足怎样清理最彻底&#xff1f;今天就让小编来给大家分享一下&…

Apache BeanUtils工具介绍

beanutils&#xff0c;顾名思义&#xff0c;是java bean的一个工具类&#xff0c;可以帮助我们方便的读取(get)和设置(set)bean属性值、动态定义和访问bean属性&#xff1b;细心的话&#xff0c;会发现其实JDK已经提供了一个java.beans包&#xff0c;同样可以实现以上功能&…

MyBatis的核心技术掌握,简单易懂

目录 一.MyBatis中的动态SQL 二.MyBatis中的模糊查询 1. # 符号 2. $ 符号 ---问题 ---所以大家知道 # 和 $ 在MyBatis中的模糊查询中的区别了嘛&#xff1f;&#xff1f; 三.MyBatis 中的结果映射 1. resultType&#xff1a; 2. resultMap&#xff1a; ---问题 ---…

grpc整合Springboot

一、grpc的依赖 <dependencies><dependency><groupId>net.devh</groupId><artifactId>grpc-server-spring-boot-starter</artifactId><version>2.9.0.RELEASE</version></dependency></dependencies><build>…

技术未来论:为何校对将是AI时代的新前沿

随着信息时代的逐步深化&#xff0c;AI技术已成为全球进程中的核心动力。其深远的影响已经触及了社会的各个领域。而在这充满机器智慧的时代&#xff0c;一个古老的领域——校对&#xff0c;却意外地与AI结合&#xff0c;成为了新的技术前沿。这是为何&#xff1f; 1.信息的尊…

YOLO目标检测算法调试过程学习记录

先前已经完成过YOLO系列目标检测算法的调试过程&#xff0c;今天主要是将所有的调试加以总结 这里的conda环境就不再赘述了&#xff0c;直接使用requirement.txt文件的即可&#xff0c;也可以参考YOLOX的配置过程5 数据集处理 YOLOv5有自己的数据集格式&#xff0c;博主的数据…

面试热题(二叉树的最大路径)

路径 被定义为一条从树中任意节点出发&#xff0c;沿父节点-子节点连接&#xff0c;达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点&#xff0c;且不一定经过根节点。 路径和 是路径中各节点值的总和。 给定一个二叉树的根节点 root…

Electron学习2 使用Electron-vue和Vuetify UI库

Electron学习2 使用Electron-vue和Vuetify UI库 一、Electron-vue简介二、安装yarn三、创建Electron-vue项目1. 关于 electron-builder2. 安装脚手架3. 运行4. 打包应用程序 四、background.js说明1. 引入模块和依赖&#xff1a;2. 注册协议&#xff1a;3. 创建窗口函数&#x…

企业内部wiki系统工具有哪些?盘点 8款最佳 Wiki 系工具

WiKi支持面向社群的协作式写作&#xff0c;同时也包括一组支持这种写作的辅助工具。有人认为&#xff0c;Wiki系统属于一种人类知识的网络系统&#xff0c;我们可以在Web的基础上对Wiki文本进行浏览、创建、更改&#xff0c;而且这种创建、更改、及发布的代价远比HTML文本小 &a…

Java“牵手”根据关键词搜索(分类搜索)lazada商品列表页面数据获取方法,lazadaAPI实现批量商品数据抓取示例

lazada商城是一个网上购物平台&#xff0c;售卖各类商品&#xff0c;包括服装、鞋类、家居用品、美妆产品、电子产品等。要获取lazada商品列表和商品详情页面数据&#xff0c;您可以通过开放平台的接口或者直接访问lazada商城的网页来获取商品详情信息。以下是两种常用方法的介…

通达信指标公式15:除权除息数据统计分析

#1.关于除权除息指标的介绍&#xff1a;本指标是小红牛原创指标之一&#xff0c;觉得有必要研究一下这个问题&#xff0c;所以就花时间整理一下这个指标相关内容&#xff0c;大家可以在本源码基础上&#xff0c;进一步优化自己的思路。本指标为通达信幅图指标&#xff0c;可以做…

关于通达信指标公式中,出现乱码的解决方法

★★★★★博文原创不易&#xff0c;我的博文不需要打赏&#xff0c;也不需要知识付费&#xff0c;可以白嫖学习小技巧&#xff0c;喜欢的老铁可以多多帮忙点赞&#xff0c;小红牛在此表示感谢&#xff0c;就是对作者的最大支持。愿与诸君共勉&#xff0c;悟道于股市★★★★★…

软件测试下的AI之路(1)

&#x1f60f;作者简介&#xff1a;博主是一位测试管理者&#xff0c;同时也是一名对外企业兼职讲师。 &#x1f4e1;主页地址&#xff1a;【Austin_zhai】 &#x1f646;目的与景愿&#xff1a;旨在于能帮助更多的测试行业人员提升软硬技能&#xff0c;分享行业相关最新信息。…

手机无人直播软件,有哪些优势?

近年来&#xff0c;随着手机直播的流行和直播带货的市场越来越大&#xff0c;手机无人直播软件成为许多商家开播带货的首选。在这个领域里&#xff0c;声音人无人直播系统以其独特的优势&#xff0c;成为市场上备受瞩目的产品。接下来&#xff0c;我们将探讨手机无人直播软件给…

IO流笔记

文件基础知识 创建文件 package org.example; import org.junit.Test;import java.io.File; import java.io.IOException;public class FileCreate{public static void main(String[] args) {}Test//方式1&#xff1a;new File(Strin pathname)public void create01(){File fil…

innovus如何设置size only

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 给instance设置size only属性命令如下: dbset [dbGet top.inst.name aa/bb -p] .dontTouch sizeOk 给一个module设置size only需要foreach循环一下: foreach inst [dbGet top.…

Docker常用操作命令(二)

Docker常用操作命令(二) 11、进入容器 docker exec -it 容器名称or容器ID /bin/bash [rootzch01 ~]# docker exec -it 973ff3caff19 /bin/bash 退出容器 root973ff3caff19:/# exit 12、查看容器中的进程 docker top 容器名称or容器ID [rootzch01 ~]# docker top 973ff3c…

Sui第四轮资助:16个团队瓜分

近日&#xff0c;Sui基金会公布了第四轮开发者资助名单&#xff0c;受助项目均是集中在DeFi、支付、基础设施、游戏、预言机等领域的Sui生态项目&#xff0c;他们是从2023年7月1日之前提交的申请中选出的。在此时间之后提交的任何项目目前正在审查中。 在前三轮资助中累积发放…

魔术般的平板式扫描仪,OCR好帮手,文档数字化一键搞定

平板式扫描仪是一种常见的扫描设备&#xff0c;通常用于将纸质文档转换为数字格式&#xff08;OCR&#xff09;&#xff0c;一般的复印店和办公室等场所使用的基本上都是这种扫描仪。它由一个平坦的玻璃板和一个移动的扫描头组成。用户将纸质文档放置在平板上&#xff0c;然后通…

WebDAV之π-Disk派盘 + 一羽记帐

一羽记帐是一款真正让你体验3S极速记账的轻量级APP。针对个人记账,没有花哨冗余的功能。界面美丽、无广告、极速启动、功能全面。一羽记帐功能涵括广,基本可以满足90%人的记账需求。完全无侵入、百分百无广告,无需担心数据安全,所有的操作都不经过任何第三方。 π-Disk派盘…