You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何计算餐厅座位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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 18:48:02