2020 vivo春招笔试第三题解析
统计第N天手机产量
看一下题目描述
/**
* 在vivo产线上,每位职工随着对手机加工流程认识的熟悉和经验的增加,日产量也会不断攀升。
* 假设第一天量产1台,接下来2天(即第二、三天)每天量产2件,接下来3天(即第四、五、六天)每天量产3件 ... ...
* 以此类推,请编程计算出第n天总共可以量产的手机数量。
* 输入例子1:
* 11
*
* 输出例子1:
* 35
*
* 例子说明1:
* 第11天工人总共可以量产的手机数量
*/
本质上是一个阶梯函数,阶梯的宽度和天数有关。本题应该有公式化的解法,不过我太菜了,还想不出来。
所以给大家一种好理解的解法。
还记得Leetcode的跳跃游戏II吗?那个题目的要求是用最少跳数跳到终点,我们有一种O(n)的解法来解答那个题目,即选定跳跃点,在到达下一个跳跃点时,根据前面两个跳跃点之间 的最大跳跃距离选定新的下一个跳跃点。
本题目和上面的跳跃游戏很相似,只不过,我们每次跳跃的最大长度再自增1,下面给出解法。
public class Solution {
/**
*
* @param n int整型 第n天
* @return int整型
*/
public int solution (int n) {
int currGap=1;
int nextPos=1;//需要更新每天生产数量变化的地方
int phoneNum=0;
for(int i=1;i<=n;i++){
phoneNum+=currGap;
if(i==nextPos){
currGap++;
nextPos=i+currGap;
}
}
return phoneNum;
}
}