题解 | #牛奶工厂#

牛奶工厂

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;

    }
};
全部评论

相关推荐

沉淀一会:1.同学你面试评价不错,概率很大,请耐心等待; 2.你的排名比较靠前,不要担心,耐心等待; 3.问题不大,正在审批,不要着急签其他公司,等等我们! 4.预计9月中下旬,安心过节; 5.下周会有结果,请耐心等待下; 6.可能国庆节前后,一有结果我马上通知你; 7.预计10月中旬,再坚持一下; 8.正在走流程,就这两天了; 9.同学,结果我也不知道,你如果查到了也告诉我一声; 10.同学你出线不明朗,建议签其他公司保底! 11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
10-07 23:57
已编辑
电子科技大学 Java
八街九陌:博士?客户端?开发?啊?
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务