2020 vivo春招笔试题解析

2020 vivo春招笔试第三题解析

  • 统计第N天手机产量

统计第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;
        }
    }

你可能感兴趣的:(数据结构与算法分析)