zoukankan      html  css  js  c++  java
  • [Algorithm] How many meeting rooms needed?

    Give you set of meetings start time and end time, count how many meeting rooms needed.

    For example:

    [[2, 5], [1, 3], [2, 7], [6, 8]] // needs 3 meeting rooms

    We can use a memo table to store the at which time how many rooms needed. It is sort of like Knapsack problem. Check out this post for similar question.

    Code:

    function* generateAry(start, end) {
      let i = start;
      while (i <= end) {
        yield i;
        i++;
      }
    }
    
    // O(N*K): K: number of hours, N: number of room
    // S(K)
    function availableRoom(arys) {const { min, max } = arys.reduce(
        (acc, ary) => {
          const [start, end] = ary;
          let { min, max } = acc;
          if (start < min) {
            min = start;
          }
          if (end > max) {
            max = end;
          }
          return { min, max };
        },
        { min: Infinity, max: 0 }
      );
      const hours = Array.from(generateAry(min, max));
      const memo = hours.map(x => 0);
    
      function helper(arys, hours, memo) {
        let countRooms = 0;
    
        for (let row in arys) {
          for (let col in hours) {
            let prevCount = memo[col];
            let [min, max] = arys[row];
            // if the min > hour, set previous row same col value, the same as max < hour
            if (min > hours[col] || max < hours[col]) {
              memo[col] = prevCount;
              continue;
            }
    
            if (min <= hours[col] && max >= hours[col]) {
              memo[col] = prevCount + 1;
            }
    
            countRooms = Math.max(countRooms, memo[col]);
          }
        }
        console.log(memo); // [1, 3, 3, 2, 2, 2, 2, 1]
        return countRooms;
      }
    
      return helper(arys, hours, memo);
    }
    
    console.log(availableRoom([[2, 5], [1, 3], [2, 7], [6, 8]])); // 3
  • 相关阅读:
    python中的运算符的分类以及使用方法
    python的变量的命名规则以及定义
    C#和Java在重写上的区别
    IIS6 伪静态
    【读书笔记】Linux源码注释
    计算机是如何启动的?
    XSHELL下直接下载文件到本地(Windows)
    [转载]Linux 环境下编译 0.11版本内核 kernel
    虚拟化技术
    CentOS 6.4 编译安装LLVM3.3,Clang和Libc++
  • 原文地址:https://www.cnblogs.com/Answer1215/p/10605000.html
Copyright © 2011-2022 走看看