- 设计思想:
-视频讲解链接B站视频讲解
- 复杂度分析:
- 代码:
c++版本:
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 返回牛牛最终是从第几个门进入食堂吃饭的 * @param n int整型 代表门的数量 * @param a int整型vector 代表每个门外等待的人数 * @return int整型 */ int nowcoderQueue(int n, vector<int>& a) { // write code here int res = 0;//进入食堂吃饭的门编号 //先进行一轮游 for(int i = 0;i < n;i ++){ a[i] -= i; if(a[i] <= 0) return i + 1;//如果到达门口的时候排队人数为0直接返回门编号 } //进行第二轮 int num = INT_MAX; for(int i = 0;i < n;i ++){ int temp = a[i] / n;//至少需要几轮a if(a[i] % n == 1) temp ++;//不能整除n还得+1轮 if(temp < num){ //更新值 num = temp; res = i; } } return res + 1; } };
Java版本:
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 返回牛牛最终是从第几个门进入食堂吃饭的 * @param n int整型 代表门的数量 * @param a int整型一维数组 代表每个门外等待的人数 * @return int整型 */ public int nowcoderQueue (int n, int[] a) { // write code here int res = 0;//进入食堂吃饭的门编号 //先进行一轮游 for(int i = 0;i < n;i ++){ a[i] -= i; if(a[i] <= 0) return i + 1;//如果到达门口的时候排队人数为0直接返回门编号 } //进行第二轮 int num = Integer.MAX_VALUE; for(int i = 0;i < n;i ++){ int temp = a[i] / n;//至少需要几轮a if(a[i] % n == 1) temp ++;//不能整除n还得+1轮 if(temp < num){ //更新值 num = temp; res = i; } } return res + 1; } }
Python版本:
# # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # 返回牛牛最终是从第几个门进入食堂吃饭的 # @param n int整型 代表门的数量 # @param a int整型一维数组 代表每个门外等待的人数 # @return int整型 # class Solution: def nowcoderQueue(self , n , a ): # write code here res = 0#进入食堂吃饭的门编号 #先进行一轮游 for i in range(0,n): a[i] -= i; if(a[i] <= 0): return i + 1#如果到达门口的时候排队人数为0直接返回门编号 #进行第二轮 num = 1000000000 for i in range(0,n): temp = a[i] // n#至少需要几轮a if(a[i] % n == 1): temp +=1 #不能整除n还得+1轮 if(temp < num): #更新值 num = temp res = i return res + 1
JavaScript版本:
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 返回牛牛最终是从第几个门进入食堂吃饭的 * @param n int整型 代表门的数量 * @param a int整型一维数组 代表每个门外等待的人数 * @return int整型 */ function nowcoderQueue( n , a ) { // write code here let res = 0;//进入食堂吃饭的门编号 //先进行一轮游 for(let i = 0;i < n;i ++){ a[i] -= i; if(a[i] <= 0) return i + 1;//如果到达门口的时候排队人数为0直接返回门编号 } //进行第二轮 let num = 1000000000; for(let i = 0;i < n;i ++){ let temp = parseInt([i] / n);//至少需要几轮a if(a[i] % n == 1) temp ++;//不能整除n还得+1轮 if(temp < num){ //更新值 num = temp; res = i; } } return res + 1; } module.exports = { nowcoderQueue : nowcoderQueue };