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
  • 相关阅读:
    正则表达式
    理解CPU steal time
    装饰器(带参数)
    装饰器(入门)
    递归
    冒泡算法
    Chrome for Mac键盘快捷键!来自Google Chrome官网!
    swoole深入学习 4. process
    通俗讲解 异步,非阻塞和 IO 复用
    swoole深入学习 3. upd Server和udp Client
  • 原文地址:https://www.cnblogs.com/Answer1215/p/10605000.html
Copyright © 2011-2022 走看看