座位"/>
1881. 飞机座位
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 = 2,S = "1A 2F 1C" 输出: 2 输入: N = 1,S = "" 输出: 2
注意事项
- N是在[1,50]内的整数;
- 字符串S由有效的座位名称组成,并用单个空格分隔;
- 每个座位号最多在字符串S中出现一次。
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) { int sum = 0; String[] s = new String[]{"B", "C", "D", "E", "F", "G", "H", "I"}; String[] strings = S.split(" "); HashSet<String> hashSet = new HashSet<>(Arrays.asList(strings)); for (int i = 1; i <= N; i++) { int flag = 0; for (int j = 0; j < s.length; j++) { if (!hashSet.contains(i + s[j])) { flag++; if (flag > 3) { if (j == 3 || j == 5 || j == 7) { // System.out.println(i + s[j]); sum++; flag = 0; } } } else { flag = 0; } } } return sum; } }
发布评论