2020 vivo春招筆試題解析

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;
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章