Leetcode每日一题:849. 到最近的人的最大距离(2023.8.22 C++)

这篇具有很好参考价值的文章主要介绍了Leetcode每日一题:849. 到最近的人的最大距离(2023.8.22 C++)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

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

题目描述:

实现代码与解析:

双指针

原理思路:


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

题目描述:

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

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

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

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

示例 1:

Leetcode每日一题:849. 到最近的人的最大距离(2023.8.22 C++),Leetcode,leetcode,c++,算法

输入: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
  • 至少有一个 空座位
  • 至少有一个 座位上有人

实现代码与解析:

双指针

class Solution {
public:
    int maxDistToClosest(vector<int>& seats) {
        
        int res = 0;
        int l = 0;

        while(l < seats.size() && seats[l] == 0) l++; // 第一个非0
        res = max(res, l); // 算一下最左侧距离
        
        while(l < seats.size())
        {
            int r = l + 1;
            while(r < seats.size() && seats[r] == 0) r++; // i 后第一个非0

            if (r == seats.size()) res = max(res, r - l - 1); // 如果是最后一个,算一下与右侧的距离
            else res = max(res, (r - l) >> 1); // 不是最后一个,那么最大距离是其之间的距离除2

            l = r; // 计算下一个区间
        }
        return res;
    }
};

原理思路:

        简单题,双指针,每个区间的最大距离就是两个非0区间差值的一半,不过左右两侧不一定有1,单独处理一下即可。文章来源地址https://www.toymoban.com/news/detail-672382.html

到了这里,关于Leetcode每日一题:849. 到最近的人的最大距离(2023.8.22 C++)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【LeetCode每日一题】——85.最大矩形

    矩阵 困难 85.最大矩形 给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。 示例 1: 输入:matrix = [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,“1”,“1”],[“1”,“0”,“0”,“1”,“

    2024年02月13日
    浏览(30)
  • 【LeetCode每日一题】53. 最大子数组和

    https://leetcode.cn/problems/maximum-subarray/description/ 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。 先算出数组的前缀和,然后通过2个for循环遍历出所有的连续子数组。 寻找一个具有

    2024年02月04日
    浏览(43)
  • 每日一题——LeetCode1189.气球的最大数量

    方法一 个人方法: 统计text字符串中\\\'b\\\'、\\\'a\\\'、\\\'l\\\'、\\\'o\\\'、\\\'n\\\' 这几个字符出现的次数 l和n需要两个才能拼成一个balloon,所以碰到l和o加1,其他字符加2 最后求出出现次数最少的那个字符再除以2就是能拼凑成的单词数量,避免出现小数要使用向下取整 消耗时间和内存情况: 方法

    2024年02月01日
    浏览(27)
  • 【LeetCode每日一题】410. 分割数组的最大值

    2024-1-21 410. 分割数组的最大值 思路:二分查找+贪心 利用二分查找法和贪心算法来求解将数组分割为m个非空连续子数组,使得每个子数组的和的最大值最小 首先,我们需要确定二分查找的左右边界。左边界 left 初始化为数组中的最大值,右边界 right 初始化为数组所有元素的

    2024年01月23日
    浏览(31)
  • LeetCode每日一题——1691. 堆叠长方体的最大高度

    题目: 828. 统计子串中的唯一字符 难度: 困难 给你 n 个长方体 cuboids ,其中第 i 个长方体的长宽高表示为 cuboids[i] = [widthi, lengthi, heighti](下标从 0 开始)。请你从 cuboids 选出一个 子集 ,并将它们堆叠起来。 如果 widthi = widthj 且 lengthi = lengthj 且 heighti = heightj ,你就可以将

    2024年02月10日
    浏览(23)
  • 【Leetcode】【每日一题】【中等】1465. 切割后面积最大的蛋糕

    力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。 https://leetcode.cn/problems/maximum-area-of-a-piece-of-cake-after-horizontal-and-vertical-cuts/description/?envType=daily-questionenvId=2023-10-27 矩形

    2024年02月07日
    浏览(25)
  • ( 数组和矩阵) 485. 最大连续 1 的个数 ——【Leetcode每日一题】

    难度:简单 给定一个二进制数组 nums , 计算其中最大连续 1 的个数。 示例 1: 输入:nums = [1,1,0,1,1,1] 输出:3 解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3. 示例 2: 输入:nums = [1,0,1,1,0,1] 输出:2 提示: 1 = n u m s . l e n g t h = 1 0 5 1 = nums.length = 10^5

    2024年02月08日
    浏览(34)
  • 每日一题——LeetCode1299.将每个元素替换为右侧最大元素

    方法一 个人方法:  题目意思就是求在i=1;i++的循环条件下,arr[i]-arr[arr.length-1]的最大值分别为多少,最后一项默认为-1 用slice方法可以每次把数组第一位去除,得到求最大值的目标数组 Math的max方法可以直接返回数组里的最大值 但是不能每次循环都求一遍目标数组的最大值,

    2024年01月23日
    浏览(44)
  • LeetCode每日一题——813. 最大平均值和的分组

    题目: 813. 最大平均值和的分组 难度: 普通 给定数组 nums 和一个整数 k 。我们将给定的数组 nums 分成 最多 k 个相邻的非空子数组 。 分数 由每个子数组内的平均值的总和构成。 注意我们必须使用 nums 数组中的每一个数进行分组,并且分数不一定需要是整数。 返回我们所能

    2024年02月13日
    浏览(32)
  • LeetCode每日一题:1921. 消灭怪物的最大数量(2023.9.3 C++)

    目录 1921. 消灭怪物的最大数量 题目描述: 实现代码与解析: 贪心 原理思路:         你正在玩一款电子游戏,在游戏中你需要保护城市免受怪物侵袭。给你一个  下标从 0 开始  且长度为  n  的整数数组  dist  ,其中  dist[i]  是第  i  个怪物与城市的  初始距离 (

    2024年02月10日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包