题解 | #牛奶工厂#
牛奶工厂
https://www.nowcoder.com/practice/264efc6e41394a0286c51eb2521ba386
大家好,我是开车的阿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;
}
};
阿Q的题解 文章被收录于专栏
阿Q秋招刷过的题
