前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >LeetCode 0849. 到最近的人的最大距离

LeetCode 0849. 到最近的人的最大距离

原创
作者头像
Yano_nankai
修改于 2021-02-23 10:01:53
修改于 2021-02-23 10:01:53
5470
举报
文章被收录于专栏:二进制文集二进制文集

题目描述

题目链接

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

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

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

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

示例 1:

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

示例 2:

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

示例 3:

代码语言:txt
AI代码解释
复制
输入:seats = [0,1]
输出:1

解题思路

  • 先判断开始的连续 0、结尾的连续 0,即为 offset
  • 接着判断中间的连续 0,个数即为 max,结果是 (max + 1) / 2,因为 1 2 个连续 0 的距离为 1,3 4 个连续 0 的距离为 2

取 offset 和 (max + 1) / 2 的最大值。

核心就在于两端的连续 0,和中间的连续 0 的计算规则是不一样的。

代码

代码语言:txt
AI代码解释
复制
public int maxDistToClosest(int[] seats) {
	// 找到最长的连续为 0 的长度
	int start = 0, end = seats.length - 1;
	while (seats[start] == 0 && start + 1 < seats.length && seats[start + 1] == 0) {
		start++;
	}
	while (seats[end] == 0 && end - 1 >= 0 && seats[end - 1] == 0) {
		end--;
	}
	int offset = Math.max(start + 1, seats.length - end);
	int max = 0;
	for (int i = start; i < end; i++) {
		if (seats[i] == 0) {
			int count = 1;
			while (i + 1 < seats.length && seats[i + 1] == 0) {
				i++;
				count++;
			}
			max = Math.max(count, max);
		}
	}
	// 1 2 为 1,3 4 为 2
	return Math.max((max + 1) / 2, offset);
}

复杂度分析

  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

GitHub LeetCode 项目

项目 GitHub LeetCode 全解,欢迎大家 star、fork、merge,共同打造最全 LeetCode 题解!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
LeetCode 第 22 场双周赛(220/2041,前10.8%)
全国排名:220 / 2041,10.8%;全球排名:729 / 5630,12.9%
Michael阿明
2020/07/13
3410
LeetCode-53. 最大子数组和(Java)
       当你leetcode刷多了你就自然看到这类最优解的体型,基本就是​​动态规划​​或者贪心算法。
bug菌
2023/05/27
2490
LeetCode-53. 最大子数组和(Java)
【算法千题案例】⚡️每日LeetCode打卡⚡️——59.最大连续 1 的个数
????前言 ????原题样例:最大连续 1 的个数 ????C#方法:一次遍历 ????Java 方法:一次遍历 ????总结 ????前言 ???? 算法题 ???? ???? 每天打卡一道算法
呆呆敲代码的小Y
2021/10/22
3760
LeetCode 849. 到最近的人的最大距离
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/maximize-distance-to-closest-person 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
Michael阿明
2020/07/13
6940
LeetCode 849. 到最近的人的最大距离
leetcode-849-到最近的人的最大距离
题目描述: 在一排座位( seats)中,1 代表有人坐在座位上,0 代表座位上是空的。 至少有一个空座位,且至少有一人坐在座位上。 亚历克斯希望坐在一个能够使他与离他最近的人之间的距离达到最大化的座位上。 返回他到离他最近的人的最大距离。 示例 1: 输入:[1,0,0,0,1,0,1] 输出:2 解释: 如果亚历克斯坐在第二个空位(seats[2])上,他到离他最近的人的距离为 2 。 如果亚历克斯坐在其它任何一个空位上,他到离他最近的人的距离为 1 。 因此,他到离他最近的人的最大距离是 2 。 示
chenjx85
2018/07/05
9790
[LeetCode Weekly Contest 88]849. 到最近的人的最大距离
第二道题目相对来说比较简单。 题目描述 849. 到最近的人的最大距离 在一排座位( seats)中,1 代表有人坐在座位上,0 代表座位上是空的。 至少有一个空座位,且至少有一人坐在座位上。 亚历克斯希望坐在一个能够使他与离他最近的人之间的距离达到最大化的座位上。 返回他到离他最近的人的最大距离。 示例 1: 输入:[1,0,0,0,1,0,1] 输出:2 解释: 如果亚历克斯坐在第二个空位(seats[2])上,他到离他最近的人的距离为 2 。 如果亚历克斯坐在其它任何一个空位上,他到离他最近的人的距离
杜逸先
2018/06/10
1.4K0
004. 寻找两个正序数组的中位数 | Leetcode题解
给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数。
苏南
2020/12/16
1.5K0
004. 寻找两个正序数组的中位数 | Leetcode题解
LeetCode每日一题06-16
亚历克斯和李用几堆石子在做游戏。偶数堆石子排成一行,每堆都有正整数颗石子 piles[i] 。
玛卡bug卡
2022/09/20
2530
LeetCode每日一题06-16
Leetcode题解——849/950
我们将有人的座位的下标记录到一个list中,剩下的事情就是要找一个点,距离list中某个元素的最大距离
出其东门
2019/08/06
3490
LeetCode 0053. 最大子序和[动态规划详解]
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
Yano_nankai
2021/03/04
2820
LeetCode 0053. 最大子序和[动态规划详解]
LeetCode 1140. 石子游戏 II(DP)*
亚历克斯和李继续他们的石子游戏。许多堆石子 排成一行,每堆都有正整数颗石子 piles[i]。游戏以谁手中的石子最多来决出胜负。
Michael阿明
2021/02/19
3580
LeetCode 0032. 最长有效括号[动态规划详解]
给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度。
Yano_nankai
2021/03/02
5040
LeetCode 0032. 最长有效括号[动态规划详解]
LeetCode 0209. 长度最小的子数组
找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 numsl, numsl+1, ..., numsr-1, numsr ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
Yano_nankai
2021/02/25
6130
LeetCode 0209. 长度最小的子数组
LeetCode 877. 石子游戏(DP)
亚历克斯 和 李 用几堆石子在做游戏。偶数堆石子排成一行,每堆都有正整数颗石子 piles[i] 。
Michael阿明
2020/07/13
7120
LeetCode 周赛上分之旅 #41 结合离散化的线性 DP 问题
从 1 开始从小到大枚举,如果当前元素 cur 与已选列表不冲突,则加入结果中。为了验证是否冲突,我们使用散列表在 O(1) 时间复杂度判断。
用户9995743
2023/09/09
2820
LeetCode 0628. 三个数的最大乘积
给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。
Yano_nankai
2021/02/21
3700
LeetCode 0628. 三个数的最大乘积
LeetCode 0228. 汇总区间
返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。
Yano_nankai
2021/02/22
2050
LeetCode 0228. 汇总区间
Leetcode No.53 最大子序和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
week
2022/01/07
2920
【面试高频题】难度 3/5,既是经典区间 DP,也是经典博弈论
亚历克斯和李用几堆石子在做游戏。偶数堆石子排成一行,每堆都有正整数颗石子 piles[i] 。
宫水三叶的刷题日记
2021/11/15
7160
LeetCode 0123. 买卖股票的最佳时机 III[动态规划详解]
项目 GitHub LeetCode 全解,欢迎大家 star、fork、merge,共同打造最全 LeetCode 题解!
Yano_nankai
2021/03/29
5130
LeetCode 0123. 买卖股票的最佳时机 III[动态规划详解]
相关推荐
LeetCode 第 22 场双周赛(220/2041,前10.8%)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档