本文主要是介绍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;
}
}
这篇关于1881. 飞机座位的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!