持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第19天,点击查看活动详情
每日力扣是一个专门用来讲力扣中国每天发布的每日一题的栏目。本专栏不提供题目的解答源码,只讲解思路,目的是养成每日刷题、提高自己手感,从而达到算法熟练的目标。
题目(已做删减处理)
有三明治都放在一个 栈 里,每一轮:如果队列最前面的学生 喜欢 栈顶的三明治,那么会 拿走它 并离开队列。否则,这名学生会 放弃这个三明治 并回到队列的尾部。这个过程会一直持续到队列里所有学生都不喜欢栈顶的三明治为止。
分析
一道很简单的模拟题。我们可以假设喜欢吃圆形三明治的学生为S0,喜欢吃方形三明治的学生为S1。从题目中我们可以得知:
- 最前面的三明治能否被拿走,来源于队伍中剩余的学生是否有人喜欢;
- 我们判断是否能够拿走的三明治,可以根据队伍人数是否小于0来判断。
因此,我们可以模拟整个过程:
- 如果最前面的三明治为0,而且此时S0大于0,证明队伍中的确有人喜欢,那么我们可以执行下去,此时S0需要减去1;
- 同理可得。如果最前面的三明治为1,而且此时S1大于0,证明队伍中有人喜欢S1,继续执行下去,此时S1需要减去1。
否则,终止模拟过程,返回最后的数据
总结
一道典型的模拟题。虽然说是easy难度,但是值得学习算法的同学好好解答。不仅仅是因为模拟题是笔试、面试中的重要知识点之一,更重要的是模拟题也是区分算法强弱的知识点之一。对于简单的模拟题,我们需要好好对待,认真思考,认真总结。从简单入手,一步一步掌握模拟知识点。