zoukankan      html  css  js  c++  java
  • 826. Most Profit Assigning Work

    package LeetCode_826
    
    /**
     * 826. Most Profit Assigning Work
     * https://leetcode.com/problems/most-profit-assigning-work/description/
     *
     * We have jobs: difficulty[i] is the difficulty of the ith job, and profit[i] is the profit of the ith job. Now we have some workers.
     * worker[i] is the ability of the ith worker, which means that this worker can only complete a job with difficulty at most worker[i].
    Every worker can be assigned at most one job, but one job can be completed multiple times.
    For example, if 3 people attempt the same job that pays $1, then the total profit will be $3.
    If a worker cannot complete any job, his profit is $0.
    What is the most profit we can make?
    
    Example 1:
    Input: difficulty = [2,4,6,8,10], profit = [10,20,30,40,50], worker = [4,5,6,7]
    Output: 100
    Explanation: Workers are assigned jobs of difficulty [4,4,6,6] and they get profit of [20,20,30,30] seperately.
    
    Notes:
    1 <= difficulty.length = profit.length <= 10000
    1 <= worker.length <= 10000
    difficulty[i], profit[i], worker[i]  are in range [1, 10^5]
     * */
    class Solution {
        /*
        * solution: Greedy, Time complexity:O(nlogn), Space complexity:O(n)
        * */
        fun maxProfitAssignment(difficulty: IntArray, profit: IntArray, worker: IntArray): Int {
            val n = difficulty.size
            //define Pair of array,
            //for Pair, first:difficulty, second:profit; and keep track the max profile so far.
            val jobs = Array<Pair<Int, Int>>(n, { Pair(0, 0) })
            for (i in 0 until n) {
                jobs[i] = Pair(difficulty[i], profit[i])
            }
            //sort the jobs by difficulty increasing
            jobs.sortWith(Comparator { a, b -> a.first - b.first })
            //sort the worker
            worker.sort()
            var i = 0
            //current best profit
            var best = 0
            var answer = 0
            for (level in worker) {
                //keep tracking current worker how many profit can make and update the result
                while (i < n && level >= jobs[i].first) {
                    best = Math.max(best, jobs[i++].second)
                }
                answer += best
            }
            return answer
        }
    }
  • 相关阅读:
    CentOS 7.0关闭默认防火墙启用iptables防火墙
    Linux下安装jdk1.8
    Linux下的tar压缩解压缩命令详解
    centos7上安装redis
    通过克隆虚拟机来创建多个虚拟机
    深度学习的网络资料
    在ubuntu中添加widows启动项的简单方法
    循环神经网络RNN的基本介绍
    统计学习——随机过程
    spark机制理解(一)
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/13457686.html
Copyright © 2011-2022 走看看