leetcode1700.无法吃午餐的学生数量

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;
    }

猜你喜欢

转载自blog.csdn.net/weixin_51712663/article/details/127403624