题解 | #牛奶工厂#
牛奶工厂
https://www.nowcoder.com/practice/264efc6e41394a0286c51eb2521ba386
知识点
模拟/双指针
思路
题目虽然要求排序,但是没有要求返回排序后的数组,所以直接对time1中的前m个数求和,再对time2中的前n个数求和,返回二者的和即可
若按题目要求,则使用双指针i,j(i<m,j<n),分别维护time1和time2的当前值,将当前time1[i]与time2[j]的较小值加入temp数组即可。当其中time1和time2的其中一组已经完全加入完以后,另一个数组的剩余所有都会比当前的最大值大,全部依次加入temp即可。
最后按照题意把temp数组赋值回time1中,然后遍历求和(脱裤子放屁)
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param time1 int整型vector
* @param time2 int整型vector
* @param m int整型
* @param n int整型
* @return int整型
*/
int milk_sum(vector<int>& time1, vector<int>& time2, int m, int n) {
// write code here
//1.面向答案编程
// int sum1 = 0;
//for(int i=0;i<m;i++)sum+=time1[i];
//for(int i=0;i<n;i++)sum+=time2[i];
//return sum1;
//2.题意过程
int i = 0, j = 0;
vector<int>temp; //先拿另一个vector存着,一会再按照题意放time1里
for (; i < m && j < n;) {//加入较小的那个
if (time1[i] <= time2[j]) {
temp.push_back(time1[i]);
i++;
} else {
temp.push_back(time2[j]);
j++;
}
}
//另一个数组依次都放入temp
if (i != m)for (int k = i; k < time1.size(); k++)temp.push_back(time1[k]);
else if (j != n)for (int k = j; k < time2.size(); k++)temp.push_back(time2[k]);
time1.clear();//可以清空time1准备赋值
for (auto v : temp) {//赋值到time1
time1.push_back(v);
}
int sum2 = 0;//存答案
for (auto v : time1) {//遍历求和
sum2 += v;
}
return sum2;
}
};