Java C++ 题解leetcode857雇佣K名工人最低成本vector pair

题目描述:

给定两个长度为N的整数数组,W数组表示每个工人的工资,Q数组表示每个工人完成工作的质量。
现在要雇佣K名工人去完成一些工作,每个工人只能完成一项工作,工人完成一项工作的质量就是该工作质量的总和,而这些工作的总成本是所有工人的工资总和。
求最小的总成本。

思路分析:

先将工资按比例排序,使用最小堆,维护当前最小的K个工资,同时记录下当前最小K个工资的序号,计算每个工人的价格,返回最小值即可。

代码实现:

class Worker
{
public:
    int quality;
    int wage;
    double ratio;
    Worker(int q, int w) : quality(q), wage(w), ratio(double(w) / double(q)){}
    bool operator<(const Worker& a)const
    {
        return ratio < a.ratio;
    }
};

class Solution {
public:
    double mincostToHireWorkers(vector<int>& quality, vector<int>& wage, int K) {
        vector<Worker>workers;
        int n = quality.size();
        for (int i = 0; i < n; i++) {
            workers.push_back(Worker(quality[i], wage[i]));
        }
        sort(workers.begin(), workers.end());
        priority_queue<int>pq;
        double res = DBL_MAX;
        int work_quality = 0;
        for (auto worker : workers) {
            int q = worker.quality;
            int w = worker.wage;
            double r = worker.ratio;
            pq.push(q);
            work_quality += q;
            if (pq.size() > K) {
                int dq = pq.top();
                pq.pop();
                work_quality -= dq;
            }
            if (pq.size() == K) {
                res = min(res, work_quality * r);
            }
        }
        return res;
    }
};

示例1:

输入:

quality = [10,20,5], wage = [70,50,30], K = 2

输出:

105

解释:

雇用第一名工人完成质量为10的工作,并支付 70$。雇用第二名工人完成质量为20的工作,并支付 50$。

示例2:

输入:

quality = [3,1,10,10,1], wage = [4,8,2,2,7], K = 3

输出:

30.66667

解释:

雇用第一名工人完成质量为3的工作,并支付 4$。雇用第二名工人完成质量为7的工作,并支付 7$。雇用第三名工人完成质量为10的工作,并支付 19.33333$。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java C++ 题解leetcode857雇佣K名工人最低成本vector pair - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Netty粘包拆包及使用原理详解

    Netty粘包拆包及使用原理详解 在使用Netty进行网络编程时,可能会遇到粘包或拆包的问题,本文将详细讲解Netty粘包拆包的原因和解决方案,并提供两个示例帮助理解。 什么是粘包和拆包 在网络通信中,发送端将多个小的数据包合并成一个大的数据包发送给接收端,称为粘包;接收端在接收数据时,将一个大的数据包拆分成多个小的数据包,称为拆包。由于网络传输是面向字节流…

    Java 2023年5月20日
    00
  • SpringBoot详细介绍SPI机制示例

    SpringBoot详细介绍SPI机制示例 在SpringBoot中,我们可以使用SPI机制来扩展框架的功能。本文将详细讲解SpringBoot详细介绍SPI机制示例的完整攻略,并提供两个示例。 1. SPI机制 SPI全称为Service Provider Interface,是Java提供的一种服务发现机制。在SPI机制中,服务提供者提供一种服务接口,而…

    Java 2023年5月15日
    00
  • Java深入讲解SPI的使用

    Java深入讲解SPI的使用 什么是SPI SPI全称为Service Provider Interface,是Java提供的一种服务发现机制,它通过在classpath路径下查找META-INF/services目录中的配置文件,来实现对接口的实现类自动发现。简单来说,它为接口的实现提供了解耦、可扩展的方式。 SPI的使用步骤 1.创建接口 public …

    Java 2023年5月26日
    00
  • SpringBoot的三大开发工具小结

    接下来我为您详细讲解“SpringBoot的三大开发工具小结”的完整攻略。 前言 SpringBoot是一个高效、快速构建基于Spring框架的应用程序的工具。它支持简单的配置,使得开发者可以快速上手,专注于业务代码的编写。在SpringBoot的开发过程中,借助于一些开发工具可以大大提高开发效率和代码质量。本文将重点介绍SpringBoot的三种开发工具:…

    Java 2023年5月15日
    00
  • java Spring MVC4环境搭建实例详解(步骤)

    以下是关于“Java Spring MVC4环境搭建实例详解(步骤)”的完整攻略,其中包含两个示例。 Java Spring MVC4环境搭建实例详解(步骤) Spring MVC是一种基于Java的Web框架,它可以帮助我们快速地开发Web应用程序。在本文中,我们将讲解如何搭建Java Spring MVC4环境。 环境搭建步骤 搭建Java Spring…

    Java 2023年5月17日
    00
  • 详解Java Ajax jsonp 跨域请求

    详解Java Ajax jsonp 跨域请求 什么是跨域请求 在浏览器请求数据时,如果请求的数据地址与原始页面的协议、域名或端口不同,就会发生跨域请求。由于浏览器有同源限制的限制,不同域名之间的请求会受到阻止。 解决方案 为了解决跨域请求的限制,可以使用 jsonp 方式进行异步请求。jsonp通过script标签来获取数据,script标签不受同源限制,因…

    Java 2023年5月26日
    00
  • 使用阿里云OSS的服务端签名后直传功能的流程分析

    使用阿里云OSS的服务端签名后直传功能的流程分析可以分为以下几个步骤: 1. 准备工作 在使用阿里云OSS的服务端签名后直传功能之前,需要先进行一些准备工作: 获得阿里云OSS的AccessKeyId和AccessKeySecret 根据需要,创建阿里云OSS的Bucket,并设置Bucket的访问权限 确定需要上传到阿里云OSS的文件的名称和存放路径 2.…

    Java 2023年5月23日
    00
  • MybatisPlus自带的queryWrapper实现时间倒序方式

    下面我将为您详细讲解“MybatisPlus自带的queryWrapper实现时间倒序方式”的完整攻略,并提供两条示例。 MybatisPlus是一种强大的mybatis框架增强工具,它内置了一些实用的功能,比如一些查询条件构造器(queryWrapper、lambdaQueryWrapper等)。其中queryWrapper是一个强大实用的查询条件构造器,…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部