题目
题解
看着题目是道双端队列,也试图用双端队列做,结果失败了
官解只用了数量关系判断就解决了…
假设吃“0”三明治的学生数量为s0,吃“1”三明治的学生数量为s1,我们只需要记录队列剩余学生中s0和s1的值。
- 如果栈顶为0,且s0>0,s0–;
- 如果栈顶为1,且s1>0,s1–;
- 否则终止过程,返回s0+s1。
class Solution {
public int countStudents(int[] students, int[] sandwiches) {
int m=students.length,n=sandwiches.length;
int s0=0,s1=0;
for(int i=0;i<m;i++){
int like=students[i];
if(like==0) s0++;
else s1++;
}
for(int i=0;i<n;i++){
int like=sandwiches[i];
if(s0>0&&like==0) s0--;
else if(s1>0&&like==1) s1--;
else return s0+s1;
}
return 0;
}
}
时间复杂度: O ( m + n ) O(m+n) O(m+n)
空间复杂度: O ( 1 ) O(1) O(1)