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;
}
}