1700.无法吃午餐的学生数量
模拟题 蓝桥也常考
写完代码代入测试样例试试就行
两种思路
使用队列进行模拟
public int countStudents(int[] students, int[] sandwiches) {
//使用队列进行模拟
Queue<Integer> deque = new LinkedList();
//初始化
for(int i = 0; i < students.length; i++){
deque.offer(students[i]);
}
int index = 0;
while(true){
//记录此时的队列大小
int size = deque.size();
//开始循环一轮消除
for(int i = 0; i < size; i++){
int stu = deque.poll();
if(stu == sandwiches[index]){
index++;
}else{
deque.offer(stu);
}
}
//如果经过消除size没变则剩余都是无法消除的
if(size == deque.size()) return size;
}
}
直接借助一个数组进行模拟
public int countStudents(int[] students, int[] sandwiches) {
int[] cnt = new int[2];
//统计student
for(int x : students){
cnt[x]++;
}
//遍历sandwichs
for(int i = 0; i < sandwiches.length; i++){
cnt[sandwiches[i]]--;
if(cnt[sandwiches[i]] == -1) return sandwiches.length - i;
}
return 0;
}