当前位置:   article > 正文

Leecode 1700-无法吃午餐的学生数量(队列)

无法吃午餐的学生数量

题目
在这里插入图片描述
在这里插入图片描述
分析
由题目可知学生的顺序可以变,三明治的不可以,因此只要三明治栈顶对应类型的三明治还有学生喜欢,则该三明治肯定会被拿走,不然的话之后的所有三明治都无法再被拿走

因此,先用数组a统计喜欢0型和1型的学生个数,然后遍历三明治数组,遇到对应的a的值相减,若到某一个栈顶三明治没有学生喜欢,即对应的数组a的值为0,则结束循环,然后输出剩下的数组a的元素和,即无法拿走午餐的学生个数

代码

int countStudents(int* students, int studentsSize, int* sandwiches, int sandwichesSize){
    int a[2],i;
    //为数组a赋初值
    memset(a,0,sizeof(a));
    //统计喜欢不同类型三明治的学生个数
    for(i=0;i<studentsSize;i++)
    {
        a[students[i]]++;
    }
    //统计无法领到午餐的学生个数
    for(i=0;i<sandwichesSize;i++)
    {
        if(a[sandwiches[i]]==0) //说明喜欢栈顶三明治的学生已经没了,剩下的学生都无法继续拿午餐
            break;

        a[sandwiches[i]]--;
    }
    //返回无法拿到午餐的学生人数
    return a[0]+a[1];
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/137416?site
推荐阅读
相关标签
  

闽ICP备14008679号