首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >参加考试的最大学生人数Javascript

参加考试的最大学生人数Javascript
EN

Stack Overflow用户
提问于 2020-06-30 23:34:35
回答 1查看 241关注 0票数 0

我正在实现“最多学生参加考试”的算法。

给定一个代表教室中座位分布的m*n矩阵座位。如果座位坏了,则用“#”字符表示,否则用“.”表示。性格。

学生可以看到坐在左边、右边、左上角和右上角的学生的答案,但他看不到坐在他前面或后面的学生的答案。返回可以在没有任何作弊的情况下一起参加考试的最大学生数量。

学生必须坐在状况良好的座位上。

我的解决方案是:如果我找到一个好的座位,我就循环矩阵".",我检查左边、右边、左上角和右上角,看看是否有另一个学生(避免作弊)。如果没有,我增加我的答案,并将此座位设置为已占。

代码语言:javascript
复制
var maxStudents = function(seats) {
  let ans = 0;
  if (seats === null || seats.length === 0) return ans;

  for (let i = 0; i < seats.length; i++) {
    for (let j = 0; j < seats[i].length; j++) {
      if (seats[i][j] === ".") {
        if (seatStudent(seats, i, j)) {
          seats[i][j] = "S";
          ans++;
        }
      }
    }
  }

  return ans;
};

const seatStudent = function(seats, i, j) {
  if (j + 1 < seats[i].length && seats[i][j + 1] === "S") return false;
  if (j - 1 > 0 && seats[i][j - 1] === "S") return false;
  if (i - 1 > 0 && j + 1 < seats[i].length && seats[i - 1][j + 1] === "S")
    return false;
  if (i - 1 > 0 && j - 1 > 0 && seats[i - 1][j - 1] === "S") return false;

  return true;
};

对于输入:

代码语言:javascript
复制
seats = [["#",".","#","#",".","#"],
         [".","#","#","#","#","."],
         ["#",".","#","#",".","#"]]

答案应该是4。然而,我得到了5。我不明白为什么它返回5。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2020-06-30 23:53:52

代码语言:javascript
复制
if(i-1 > 0)

应该是

代码语言:javascript
复制
if(i-1 >= 0)

好了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62661078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档