zoukankan      html  css  js  c++  java
  • 【leetcode】1386. Cinema Seat Allocation

    题目如下:

    A cinema has n rows of seats, numbered from 1 to n and there are ten seats in each row, labelled from 1 to 10 as shown in the figure above.

    Given the array reservedSeats containing the numbers of seats already reserved, for example, reservedSeats[i]=[3,8] means the seat located in row 3 and labelled with 8 is already reserved. 

    Return the maximum number of four-person families you can allocate on the cinema seats. A four-person family occupies fours seats in one row, that are next to each other. Seats across an aisle (such as [3,3] and [3,4]) are not considered to be next to each other, however, It is permissible for the four-person family to be separated by an aisle, but in that case, exactly two people have to sit on each side of the aisle.

    Example 1:

    Input: n = 3, reservedSeats = [[1,2],[1,3],[1,8],[2,6],[3,1],[3,10]]
    Output: 4
    Explanation: The figure above shows the optimal allocation for four families, where seats mark with blue are already reserved and 
    contiguous seats mark with orange are for one family. 

    Example 2:

    Input: n = 2, reservedSeats = [[2,1],[1,8],[2,6]]
    Output: 2
    

    Example 3:

    Input: n = 4, reservedSeats = [[4,3],[1,4],[4,6],[1,7]]
    Output: 4

    Constraints:

    • 1 <= n <= 10^9
    • 1 <= reservedSeats.length <= min(10*n, 10^4)
    • reservedSeats[i].length == 2
    • 1 <= reservedSeats[i][0] <= n
    • 1 <= reservedSeats[i][1] <= 10
    • All reservedSeats[i] are distinct.

    解题思路:这个题目其实很简单。如果 2~9之间的座位都没有被占用,那么这排坐两人;如果2~6或者4~8或者6~10中其中一个没有被占用,这排坐一人。

    代码如下:

    class Solution(object):
        def maxNumberOfFamilies(self, n, reservedSeats):
            """
            :type n: int
            :type reservedSeats: List[List[int]]
            :rtype: int
            """
            res = 0
            dic = {}
            for row,seat in reservedSeats:
                dic[row] = dic.setdefault(row,[]) + [seat]
            res += (n-len(dic))*2
    
            def check(seats,l):
                flag = True
                for i in l:
                    if i in seats:
                        flag = False
                        break
                return flag
    
            for seats in dic.itervalues():
                l = range(2,10)
                flag = check(seats,l)
                if flag:
                    res += 2
                    continue
    
                l = range(2,6)
                flag = check(seats, l)
                if flag:
                    res += 1
                    continue
    
                l = range(6, 10)
                flag = check(seats, l)
                if flag:
                    res += 1
                    continue
    
                l = range(4, 8)
                flag = check(seats, l)
                if flag:
                    res += 1
                    continue
    
            return res
  • 相关阅读:
    (网页)中的简单的遮罩层
    (后端)shiro:Wildcard string cannot be null or empty. Make sure permission strings are properly formatted.
    (网页)jQuery的时间datetime控件在AngularJs中使用实例
    Maven Myeclipse 搭建项目
    MyBatis 环境搭建 (一)
    java 常用方法
    XML 基础
    JS BOM
    js 事件
    js 的使用原则
  • 原文地址:https://www.cnblogs.com/seyjs/p/12590730.html
Copyright © 2011-2022 走看看