Leetcode1700. 无法吃午餐的学生数量[C++题解]:模拟题简单,用queue
生活随笔
收集整理的這篇文章主要介紹了
Leetcode1700. 无法吃午餐的学生数量[C++题解]:模拟题简单,用queue
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 題目分析
- 題目鏈接
- 補充 Queue的操作
題目分析
題意重述:排隊領食物,食物2種屬性;學生有唯一偏好。如果學生看到食物隊頭是自己喜歡吃的,拿走;如果學生看到食物隊頭不是自己喜歡吃的,掉頭回到自己隊伍中繼續排隊。
問是否學生都能拿到食物,不能的話返回幾個學生不能拿到食物。
思路:采用queue模擬學生和三明治, 模擬學生拿三明治的過程。采用一個標志t,看看學生循環了走了多少次。
時間復雜度分析: 最好情況是遍歷一下學生隊列,m個學生看到食物隊頭都不喜歡,整個過程結束;否則,肯定有一個學生拿走第一個食物;然后再次遍歷學生隊列,對新的食物隊頭進行觀察,以此類推…,最壞情況是每循環m次,干掉1個食物,總共n個食物,所以時間復雜度O(m×n)O(m\times n)O(m×n).這里 m和n都是最大100,所以直接枚舉10000次即可肯定可以過。
ac代碼
class Solution { public:int countStudents(vector<int>& students, vector<int>& sandwiches) {queue<int> q,s;for(auto c:students) q.push(c);for(auto c:sandwiches) s.push(c);//暴力枚舉10000次即可for(int i=0;i<10000 && q.size() && s.size();i++){if(q.front()==s.front()){q.pop(),s.pop();}else{int t=q.front();q.pop();q.push(t);}}return q.size();} };ac代碼
下面退出條件:循環了隊列長度 的5倍次,結果也過 了。
題目鏈接
Leetcode1700. 無法吃午餐的學生數量
補充 Queue的操作
queue隊列:先進先出。
queue四個核心接口
push(): 將一個元素放入queue內 front(): 返回queue隊頭元素 back():返回 queue隊尾元素 pop() 刪除隊頭總結
以上是生活随笔為你收集整理的Leetcode1700. 无法吃午餐的学生数量[C++题解]:模拟题简单,用queue的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Leetcode1690. 石子游戏 V
- 下一篇: Leetcode1701. 平均等待时间