如何计算餐厅座位JS数组中最大连续空闲座位的数量
实现思路
- 首先明确空闲座位判定规则:从给出的示例数据来看,满足以下任意一个条件即可判定为空闲座位:
seat属性值为字符串"empty"group属性值为0或字符串"empty"
- 然后将二维的座位表扁平化为一维的座位序列,统计全局连续相邻的空闲座位,遍历过程中动态维护当前连续空闲数和历史最大值
- 如果你业务规则中不同子数组对应不同的餐桌行,跨行座位不算相邻,只需要逐行统计连续空闲数再取全局最大值即可
代码实现
全局跨行列统计版本
function MaxFreeSeatsinRow(table) { // 空闲座位判定工具函数,可根据实际业务规则修改 const isFree = (seatItem) => { return seatItem.seat === 'empty' || seatItem.group === 0 || seatItem.group === 'empty' } // 扁平化二维数组为全局座位序列 const allSeats = table.flat() let currentContinuous = 0 let maxContinuous = 0 for (let seat of allSeats) { if (isFree(seat)) { currentContinuous++ maxContinuous = Math.max(maxContinuous, currentContinuous) } else { // 遇到已占座位重置当前连续计数 currentContinuous = 0 } } return maxContinuous }
单行内统计版本(跨行不算相邻)
function MaxFreeSeatsinRow(table) { const isFree = (seatItem) => { return seatItem.seat === 'empty' || seatItem.group === 0 || seatItem.group === 'empty' } let maxContinuous = 0 // 逐行统计 for (let row of table) { let currentContinuous = 0 for (let seat of row) { if (isFree(seat)) { currentContinuous++ maxContinuous = Math.max(maxContinuous, currentContinuous) } else { currentContinuous = 0 } } } return maxContinuous }
测试验证
用你提供的示例数据调用两个版本的函数,返回值均为2,符合预期要求。
内容的提问来源于stack exchange,提问作者ambrecht-web
相关产品推荐
相关产品推荐

