题解 | #牛奶供应问题#

牛奶供应问题

https://www.nowcoder.com/practice/8c66c9b7deea496193e609b70f39783d

看了好几次才读懂题,如示例1[3, 2, 4, 1, 5],3 ; 这个可以将capacity看作3个执行流,每次可以同时执行3个;比如第一次 3 2 4,同时执行2个任务后为1 0 2,将2保存下来,然后向后遍历taskDurations数组,加入1,即为1 1 2,同时减1 -> 0 0 1,将1记下来,加入5,即为5 0 1,最后完成任务为5;2 + 1 + 5 = 8。

题目分析:用一个数组v表示执行流,然后找v中的最小值和最小值的下标(也就是最先完成的执行流),然后遍历animalTaskScheduler数组,最后找出v中最大值即可。当某时v中有好几个0时,这时也不需要关心,因为找到0,times+0=times,时间是不变的。思路简单,效率不高。

#include <climits>
#include <ctime>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param taskDurations int整型vector 
     * @param capacity int整型 
     * @return int整型
     */
    int animalTaskScheduler(vector<int>& taskDurations, int capacity) {
        // write code here
        int times = 0;
        vector<int> v(capacity);
        for (int i = 0; i < taskDurations.size(); ++i)
        {
            int k = 0, small = INT_MAX; //k记录最小下标,small记录同时执行任务的最小值
            for (int j = 0; j < capacity; ++j)
            {
                if (v[j] < small)
                {
                    small = v[j];
                    k = j;
                }
            }
            times += small;
            for (auto& x : v) //执行的每个任务减去small
                x -= small;
            v[k] = taskDurations[i];
        }
	  	//找出v中最大值
        int mx = -1;
        for (auto& x : v)
            mx = max(mx, x);
        times += mx;
        
        return times;
    }
};

全部评论

相关推荐

牛客83700679...:简历抄别人的,然后再投,有反馈就是简历不行,没反馈就是学历不行,多投多改只要技术不差机会总会有的
点赞 评论 收藏
分享
06-16 15:04
黑龙江大学 Java
零OFFER战士:另一个版本查看图片
点赞 评论 收藏
分享
看到这个内容真是闹麻了。。。。。。现在有了AI以后很多人面试都会作弊吗?&nbsp;那对老老实实面试的人岂不是不公平....
程序员牛肉:公平那是对小孩子讲的童话故事,成年人的世界只有能不能接受失败的后果。 你要是能接受面试作弊被发现之后多家公司联合永久拉黑的后果,你就搞。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务