题解 | 无法吃午餐的学生数量
无法吃午餐的学生数量
https://www.nowcoder.com/practice/2dac3d7567f741a88ec551caf907934d
int countStudents(int* students, int studentslen, int* sandwiches, int sandwicheslen) {
// 统计学生中偏好0和1的数量(无需模拟队列,更高效且无内存风险)
int cnt0 = 0, cnt1 = 0;
for (int i = 0; i < studentslen; i++) {
if (students[i] == 0) cnt0++;
else cnt1++;
}
// 遍历三明治,依次消耗对应偏好的学生
for (int i = 0; i < sandwicheslen; i++) {
if (sandwiches[i] == 0) {
if (cnt0 > 0) cnt0--;
else break; // 没有偏好0的学生,后续三明治无法分配
} else {
if (cnt1 > 0) cnt1--;
else break; // 没有偏好1的学生,后续三明治无法分配
}
}
// 剩余学生数即为无法拿到三明治的人数
return cnt0 + cnt1;
}


查看17道真题和解析