大家好,我是开车的阿Q,自动驾驶的时代已经到来,没时间解释了,快和阿Q一起上车。作为自动驾驶系统工程师,必须要有最好的C++基础,让我们来一起刷题吧。

题目考察的知识点:

  • 数组操作
  • 算法思维

题目解答方法的文字分析:

根据题目的要求,每天牛的产奶量都会比前一天多一升,且最高产奶量存放在数组的首位。我们需要对给定的牛奶产量数组进行处理,得到明天牛的产奶量数组。

思考过程:

首先,我们从数组的末尾开始遍历,因为最后一位产奶量对应的是明天的产奶量。

我们从数组的末尾开始,判断当前位的产奶量是否为9,如果是9,则需要进位。否则,直接在当前位的产奶量加1并返回结果数组。

如果产生了进位,则将当前位的产奶量设为0,并继续向前处理前一位的产奶量。

最后,如果第一位产奶量为0,表示最高产奶量也发生了进位,我们需要在数组的开头插入1表示新的最高产奶量。

使用的编程语言:C++

完整且正确的编程代码如下:

#include <vector>

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param milk int整型vector 
     * @return int整型vector
     */
    vector<int> tomorrowMilk(vector<int>& milk) {
        int n = milk.size();
        vector<int> tomorrow(n);

        // 从数组末尾开始处理
        int carry = 1; // 进位标志,初始为1,表示明天的产奶量需要加1
        for (int i = n - 1; i >= 0; i--) {
            int current = milk[i] + carry;
            if (current == 10) {
                carry = 1;
                tomorrow[i] = 0;
            } else {
                carry = 0;
                tomorrow[i] = current;
            }
        }

        // 如果最高产奶量产生了进位,需要在数组开头插入1
        if (carry == 1) {
            tomorrow.insert(tomorrow.begin(), 1);
        }

        // 返回明天的产奶量数组
        return tomorrow;
    }
};