题解 | #牛奶工厂#

牛奶工厂

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;

    }
};
全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务