大家好,我是开车的阿Q,自动驾驶的时代已经到来,没时间解释了,快和阿Q一起上车。作为自动驾驶系统工程师,必须要有最好的C++基础,让我们来一起刷题吧。
1. 题目考察的知识点
本题主要考察数组的合并和排序。
2. 题目解答方法的文字分析
我们有两个有序数组times1
和times2
,需要将times2
中的元素合并到times1
中,并保持合并后的数组times1
仍然是有序的。题目要求最终计算合并后的数组中所有元素的和。
一种解法是使用双指针法。我们可以维护两个指针ptr1
和ptr2
,分别指向times1
和times2
的末尾元素。同时,我们还维护一个变量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; } };