2020年のvivo春募集筆記試験の3番目の質問の分析
N日目の携帯電話の生産を数える
タイトルの説明を見てください
/**
* 在vivo产线上,每位职工随着对手机加工流程认识的熟悉和经验的增加,日产量也会不断攀升。
* 假设第一天量产1台,接下来2天(即第二、三天)每天量产2件,接下来3天(即第四、五、六天)每天量产3件 ... ...
* 以此类推,请编程计算出第n天总共可以量产的手机数量。
* 输入例子1:
* 11
*
* 输出例子1:
* 35
*
* 例子说明1:
* 第11天工人总共可以量产的手机数量
*/
これは本質的にステップ関数であり、ステップの幅は日数に関連しています。この問題には定型的な解決策があるはずですが、私は漠然としていて考えられません。
ですから、全員に十分な理解のある解決策を提供してください。
LeetcodeのジャンプゲームIIを覚えていますか?その質問の要件は、最後にジャンプするために最小のホップ数を使用することです。その質問を解決するためのO(n)ソリューションがあります。つまり、ジャンプポイントを選択し、次のジャンプポイントに到達したときに、前の2つのジャンプポイントの違いに応じて最大ジャンプ距離は、新しい次のジャンプポイントを選択します。
この問題は、各ジャンプの最大長が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;
}
}