当前位置: 首页 > news >正文

华为od(D卷)最大社交距离

文章目录

  • 题目描述
  • 输入描述
  • 输出描述
  • 示例1
  • 思路
  • 代码

题目描述

疫情期间需要大家保证一定的社交距离,公司组织开交流会议。

座位一排共 N 个座位,编号分别为 [0, N - 1] 。

要求员工一个接着一个进入会议室,并且可以在任何时候离开会议室。

满足:

  • 每当一个员工进入时,需要坐到最大社交距离(最大化自己和其他人的距离的座位);

  • 如果有多个这样的座位,则坐到索引最小的那个座位

输入描述

  • 会议室座位总数 seatNum 。(1 <= seatNum <= 500)
  • 员工的进出顺序 seatOrLeave 数组,元素值为 1,表示进场;元素值为负数,表示出场(特殊:位置 0 的员工不会离开)。
  • 例如 - 4 表示坐在位置 4 的员工离开(保证有员工坐在该座位上)

输出描述

最后进来员工,他会坐在第几个位置,如果位置已满,则输出 - 1 。

示例1

输入
10
[1,1,1,1,-4,1]

输出
5

说明
seat -> 0 , 空在任何位置都行,但是要给他安排索引最小的位置,也就是座位 0
seat -> 9 , 要和旁边的人距离最远,也就是座位 9
seat -> 4 , 要和旁边的人距离最远,应该坐到中间,也就是座位 4
seat -> 2 , 员工最后坐在 2 号座位上
leave [4] , 4 号座位的员工离开
seat -> 5 , 员工最后坐在 5 号座位上

思路

注意最大社交距离的判断:
0, 4, 9 位置坐完之后坐的位置是2,而不是6,不是7;
所有社交距离的理解应该是:距离相近左右两人的距离最小值;也就是说 位置2的社交距离是2和位置6,位置7的社交距离是相同的,所以才选择了索引小的2。

那代码上面如何体现呢? 相邻座位的距离如果相等,或者相差不超过1,那么中间位置的最大社交距离应该是相同的。

代码

public class Demo05 {public static void main(String[] args) {// 座位数int seatNum = 10;// 坐下或者离开int[] seatOrLeave = new int[] {1, 1, 1, 1, -4, 1};//做下的位子编号TreeSet<Integer> seated = new TreeSet<>();for (int i = 0; i < seatOrLeave.length; i++) {int sOrL = seatOrLeave[i];if (sOrL > 0) {// 坐下的位置int seatIndex = -1;if (seated.size() == 0) {seatIndex = 0;} else if (seated.size() == 1) {seatIndex = seatNum - 1;} else {seatIndex = center(seated);}if (seatIndex == -1) {System.out.println(seatIndex);return;} else {seated.add(seatIndex);}//最后一个人if (i == seatOrLeave.length - 1) {System.out.println(seatIndex);}} else {// 离开seated.remove(i);}}}// 查找中间位置public static int center(TreeSet<Integer> seated) {// 两个位置之间的距离最大值int maxLength = 0;// 两个位置之间的距离最大值时,左侧坐下人位置int index = -1;// 遍历时前一个人坐下的位置int before = -1;for (Integer post : seated) {if (before == -1) {before = post;continue;}Integer l = post - before;// 中间没座位if (l == 1) {before = post;continue;}// 相邻座位的距离如果相等,或者相差不超过1,那么中间位置的最大社交距离应该是相同的。if (l > maxLength + 1) {maxLength = l;index = before + maxLength / 2;}before = post;}return index;}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 数学中常用的解题方法
  • cassandra-driver,一个超强大的Python库
  • vue3仿飞书头像,根据不同名称生成不同的头像背景色
  • 安卓开发中的AppCompat框架使用详解
  • 笔记结构设计:构建清晰、有逻辑的编程学习笔记
  • opencv-python图像增强二:图像去雾(暗通道去雾)
  • 【OpenCV】window 下 VS Code 配置OpenCV
  • 【阿旭机器学习实战】【38】支持向量机SVM实现手写数字识别,模型训练、评估,以及参数调优全流程
  • maven下载及配置详细介绍(2024最新攻略)
  • opencv颜色格式
  • LeetCode旋转图像
  • 自动驾驶行业知识汇总
  • ChatMoneyAI嘴替,高情商回复
  • 【前端】NodeJS:实战案例——记账本
  • 知识与智慧
  • [译]前端离线指南(上)
  • android 一些 utils
  • classpath对获取配置文件的影响
  • CSS 专业技巧
  • es6(二):字符串的扩展
  • ES6系列(二)变量的解构赋值
  • js如何打印object对象
  • MySQL几个简单SQL的优化
  • React系列之 Redux 架构模式
  • Zepto.js源码学习之二
  • 缓存与缓冲
  • 近期前端发展计划
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • MyCAT水平分库
  • ​插件化DPI在商用WIFI中的价值
  • #QT(串口助手-界面)
  • (10)ATF MMU转换表
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (2020)Java后端开发----(面试题和笔试题)
  • (23)Linux的软硬连接
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (二)斐波那契Fabonacci函数
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (四)鸿鹄云架构一服务注册中心
  • (一)VirtualBox安装增强功能
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .net开发时的诡异问题,button的onclick事件无效
  • .NET面试题(二)
  • .NET应用UI框架DevExpress XAF v24.1 - 可用性进一步增强
  • [ 云计算 | Azure 实践 ] 在 Azure 门户中创建 VM 虚拟机并进行验证
  • [2019.2.28]BZOJ4033 [HAOI2015]树上染色