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

1. 题目考察的知识点

本题主要考察数组的合并和排序。

2. 题目解答方法的文字分析

我们有两个有序数组times1times2,需要将times2中的元素合并到times1中,并保持合并后的数组times1仍然是有序的。题目要求最终计算合并后的数组中所有元素的和。

一种解法是使用双指针法。我们可以维护两个指针ptr1ptr2,分别指向times1times2的末尾元素。同时,我们还维护一个变量cur用来表示当前合并后数组的最后一个位置。然后我们从后往前遍历两个数组,比较times1[ptr1]times2[ptr2]的大小,将较大的元素放到times1[cur]的位置,并递减相应的指针和cur。直到遍历完times2数组中的所有元素为止。

3. 本题解析所用的编程语言

本题解析使用的编程语言是C++。

4. 完整且正确的编程代码

class Solution {
public:
    int milk_sum(vector<int>& times1, vector<int>& times2, int m, int n) {
        int ptr1 = m - 1; // 指向times1末尾元素
        int ptr2 = n - 1; // 指向times2末尾元素
        int cur = m + n - 1; // 合并后数组的最后一个位置

        // 从后往前遍历两个数组,比较并合并
        while (ptr1 >= 0 && ptr2 >= 0) {
            if (times1[ptr1] >= times2[ptr2]) {
                times1[cur] = times1[ptr1];
                ptr1--;
            } else {
                times1[cur] = times2[ptr2];
                ptr2--;
            }
            cur--;
        }

        // 如果times2中还有剩余元素,将其依次放入times1
        while (ptr2 >= 0) {
            times1[cur] = times2[ptr2];
            ptr2--;
            cur--;
        }

        // 计算合并后数组中生产时间之和
        int sum = 0;
        for (int i = 0; i < m + n; i++) {
            sum += times1[i];
        }

        return sum;
    }
};