【精】LintCode领扣算法问题答案:1881. 飞机座位

    科技2022-08-04  153

    1881. 飞机座位

    描述

    您的任务是为四口之家尽可能多的分配座位。一个四口之家必须占领一排当中连续的四个座位。过道上的座位(例如2C和2D)不被认为是彼此相邻的。一家人被过道分开是可以的,但在这种情况下必须每一边坐两个。显然,座位不可以分配给一个以上的家庭。

    编写一个函数

    class Solution {public int solution(int N,String S};

    函数中N表示有N排座位,S表示已经提供出去的座位,函数返回剩下的座位能坐四口之家的最大值。例如, N = 2,S = '1A 2F 1C’,你的函数应该返回2.下图给出了做法。 当N = 1, S = “”(空字符串),你的函数应该返回2,因为我们最多可以提供2个四口之家的座位在一排空座位中,例如下图。

    N是在[1,50]内的整数;字符串S由有效的座位名称组成,并用单个空格分隔;每个座位号最多在字符串S中出现一次。

    样例 1:

    输入: N = 2,S = "1A 2F 1C" 输出: 2

    样例 2:

    输入: N = 1,S = "" 输出: 2

    原题传送门


    文章目录

    1881. 飞机座位描述样例 1:样例 2: 题解最后说两句声明


    题解

    public class Solution { /** * @param N: the number of rows * @param S: a list of reserved seats * @return: nothing */ public int solution(int N, String S) { // Write your code here. if (S.isEmpty()) { return N * 2; } boolean[][] seats = new boolean[N][10]; for (String seat : S.split("\\s")) { int row = Integer.parseInt(seat.substring(0, seat.length() - 1)) - 1; int col = seat.charAt(seat.length() - 1) - 'A'; seats[row][col] = true; } int ret = 0; for (int i = 0; i < N; i++) { boolean way1 = true; boolean way2 = false; boolean way3 = false; for (int j = 1; j < 5; j++) { if (seats[i][j] == true) { way1 = false; break; } } if (!way1) { way2 = true; for (int j = 3; j < 7; j++) { if (seats[i][j] == true) { way2 = false; break; } } } if (!way2) { way3 = true; for (int j = 5; j < 9; j++) { if (seats[i][j] == true) { way3 = false; break; } } } if (way1) { ret++; } if (way2) { ret++; } if (way3) { ret++; } } return ret; } }

    最后说两句

    非常感谢你阅读本文章,如果你觉得本文对你有所帮助,请留下你的足迹,点个赞,留个言,多谢~

    作者水平有限,如果文章内容有不准确的地方,请指正。

    希望小伙伴们都能每天进步一点点。

    声明

    本文由二当家的白帽子博客原创,转载请注明来源,谢谢~

    Processed: 0.017, SQL: 8