题目描述
下课了,牛牛要去食堂吃饭,他们学校的食堂有很多个门,而且整个建筑物是圆形的。只不过要去吃饭的人很多,在里面吃饭的人也很多,所以大家都在门口外面排队等待吃饭。
所以牛牛采取了这样的一个策略:刚开始时,牛牛在第一个门口,如果这个门口有人在排队,那么他选择花费1分钟时间走到下一个门口,如果没有人的话,牛牛就可以直接进去吃饭啦。食堂的每一个门,每1分钟排队的人数都会减少一个。
现在给你门的数量n,和每个门外排队的人的数量,如果按照牛牛的策略,那么牛牛最终会在哪个门进去吃饭呢?请你进行编程求解,返回牛牛最终是从第几个门进入食堂吃饭的。
题目分析
起初拿到这个题目的时候我百思不得其解,后面看了大佬的代码也还是没能理解,于是干脆,我就手动模拟了一遍,把所有的情况都一一列举出来,返现这个代码原来是这个意思,题目要求我们求牛牛最后会去哪家饭店吃饭,来来回回,我们可以直接去算,把每个元素的值加上饭店的数目-1,然后减去当前位置,减一是因为当前是从0开始算的,然后求出来的值再去除以n,这样我们就能快速的判断哪个饭店的人数最先减为0.最少的肯定是最先减为0的
class Solution { public: /** * 返回牛牛最终是从第几个门进入食堂吃饭的 * @param n int整型 代表门的数量 * @param a int整型vector 代表每个门外等待的人数 * @return int整型 */ int solve(int n, vector<int>& a) { // write code here int mn=1e9; int ret=0; for(int i=0;i<n;i++){ if(((a[i]+n-1-i)/n)<mn){ mn=((a[i]+n-1-i)/n); ret=i; } } return ret+1; } };