Leetcode1700. 无法吃午餐的学生数量[C++题解]:模拟题简单,用queue
文章目錄
- 題目分析
- 題目鏈接
- 補(bǔ)充 Queue的操作
題目分析
題意重述:排隊(duì)領(lǐng)食物,食物2種屬性;學(xué)生有唯一偏好。如果學(xué)生看到食物隊(duì)頭是自己喜歡吃的,拿走;如果學(xué)生看到食物隊(duì)頭不是自己喜歡吃的,掉頭回到自己隊(duì)伍中繼續(xù)排隊(duì)。
問是否學(xué)生都能拿到食物,不能的話返回幾個(gè)學(xué)生不能拿到食物。
思路:采用queue模擬學(xué)生和三明治, 模擬學(xué)生拿三明治的過程。采用一個(gè)標(biāo)志t,看看學(xué)生循環(huán)了走了多少次。
時(shí)間復(fù)雜度分析: 最好情況是遍歷一下學(xué)生隊(duì)列,m個(gè)學(xué)生看到食物隊(duì)頭都不喜歡,整個(gè)過程結(jié)束;否則,肯定有一個(gè)學(xué)生拿走第一個(gè)食物;然后再次遍歷學(xué)生隊(duì)列,對(duì)新的食物隊(duì)頭進(jìn)行觀察,以此類推…,最壞情況是每循環(huán)m次,干掉1個(gè)食物,總共n個(gè)食物,所以時(shí)間復(fù)雜度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代碼
下面退出條件:循環(huán)了隊(duì)列長(zhǎng)度 的5倍次,結(jié)果也過 了。
題目鏈接
Leetcode1700. 無法吃午餐的學(xué)生數(shù)量
補(bǔ)充 Queue的操作
queue隊(duì)列:先進(jìn)先出。
queue四個(gè)核心接口
push(): 將一個(gè)元素放入queue內(nèi) front(): 返回queue隊(duì)頭元素 back():返回 queue隊(duì)尾元素 pop() 刪除隊(duì)頭總結(jié)
以上是生活随笔為你收集整理的Leetcode1700. 无法吃午餐的学生数量[C++题解]:模拟题简单,用queue的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Leetcode1690. 石子游戏 V
- 下一篇: Leetcode1701. 平均等待时间