新闻详情

新闻详情

首页 / 资讯中心 / 详情

贪心题目:两地调度

发布时间:2026/9/26 1:59:26来源:尧图网络
贪心题目:两地调度
文章目录题目标题和出处难度题目描述要求示例数据范围解法思路和算法代码复杂度分析题目标题和出处标题两地调度出处1029. 两地调度难度4 级题目描述要求公司计划面试2n \texttt{2n}2n人。给定一个数组costs \texttt{costs}costs其中costs[i] [aCost i , bCost i ] \texttt{costs[i] [aCost}_\texttt{i}\texttt{, bCost}_\texttt{i}\texttt{]}costs[i] [aCosti​, bCosti​]表示第i \texttt{i}i人飞往 A 市的费用为aCost i \texttt{aCost}_\texttt{i}aCosti​飞往 B 市的费用为bCost i \texttt{bCost}_\texttt{i}bCosti​。返回当每个城市都有n \texttt{n}n人抵达的情况下将每个人都飞到其中一座城市的最低费用。示例示例 1输入costs [[10,20],[30,200],[400,50],[30,20]] \texttt{costs [[10,20],[30,200],[400,50],[30,20]]}costs [[10,20],[30,200],[400,50],[30,20]]输出110 \texttt{110}110解释第一个人去 A 市费用为10 \texttt{10}10。第二个人去 A 市费用为30 \texttt{30}30。第三个人去 B 市费用为50 \texttt{50}50。第四个人去 B 市费用为20 \texttt{20}20。最低总费用为10 30 50 20 110 \texttt{10} \texttt{30} \texttt{50} \texttt{20} \texttt{110}10305020110每个城市都有一半的人在面试。示例 2输入costs [[259,770],[448,54],[926,667],[184,139],[840,118],[577,469]] \texttt{costs [[259,770],[448,54],[926,667],[184,139],[840,118],[577,469]]}costs [[259,770],[448,54],[926,667],[184,139],[840,118],[577,469]]输出1859 \texttt{1859}1859示例 3输入costs [[515,563],[451,713],[537,709],[343,819],[855,779],[457,60],[650,359],[631,42]] \texttt{costs [[515,563],[451,713],[537,709],[343,819],[855,779],[457,60],[650,359],[631,42]]}costs [[515,563],[451,713],[537,709],[343,819],[855,779],[457,60],[650,359],[631,42]]输出3086 \texttt{3086}3086数据范围2 × n costs.length \texttt{2} \times \texttt{n} \texttt{costs.length}2×ncosts.length2 ≤ costs.length ≤ 100 \texttt{2} \le \texttt{costs.length} \le \texttt{100}2≤costs.length≤100costs.length \texttt{costs.length}costs.length为偶数1 ≤ aCost i , bCost i ≤ 1000 \texttt{1} \le \texttt{aCost}_\texttt{i}\texttt{, bCost}_\texttt{i} \le \texttt{1000}1≤aCosti​, bCosti​≤1000解法思路和算法为了计算每个城市都有n nn人抵达的最低费用可以首先计算全部2 n 2n2n人都抵达 A 市的总费用total \textit{total}total然后选其中n nn人换到 B 市更新总费用并使总费用最低。对于0 ≤ i 2 n 0 \le i 2n0≤i2n将第i ii人从 A 市换到 B 市之后总费用total \textit{total}total变成total ( bCost i − aCost i ) \textit{total} (\textit{bCost}_i - \textit{aCost}_i)total(bCosti​−aCosti​)。以下将每个人抵达 B 市的费用与抵达 A 市的费用之差称为费用差即费用差为bCost − aCost \textit{bCost} - \textit{aCost}bCost−aCost费用差可能是正数、零或负数。为了使总费用最低应使抵达 B 市的n nn个人的费用差之和最小化因此应选费用差最小的n nn个人。该做法是贪心策略贪心策略的正确性说明如下。假设全部2 n 2n2n人都抵达 A 市的总费用是total \textit{total}total费用差最小的n nn个人的费用差之和是x xx则费用差最小的n nn个人抵达 B 市的情况下总费用是total x \textit{total} xtotalx。如果选一个费用差更大的人抵达 B 市则需要替换费用差最小的n nn个人之一替换之后抵达 B 市的n nn个人的费用差之和一定大于等于x xx总费用一定大于等于total x \textit{total} xtotalx不可能有更低的总费用。因此选费用差最小的n nn个人可以使总费用最低。具体做法如下。计算全部2 n 2n2n人都抵达 A 市的总费用total \textit{total}total。创建长度为2 n 2n2n的数组differences \textit{differences}differences记录每个人的费用差对于0 ≤ i 2 n 0 \le i 2n0≤i2n计算differences [ i ] costs [ i ] [ 1 ] − costs [ i ] [ 0 ] \textit{differences}[i] \textit{costs}[i][1] - \textit{costs}[i][0]differences[i]costs[i][1]−costs[i][0]。将数组differences \textit{differences}differences按升序排序。遍历数组differences \textit{differences}differences的前n nn个元素即最小的n nn个元素对于0 ≤ i n 0 \le i n0≤in将total \textit{total}total更新为total differences [ i ] \textit{total} \textit{differences}[i]totaldifferences[i]。遍历结束之后的total \textit{total}total即为每个城市都有n nn人抵达的最低费用。代码classSolution{publicinttwoCitySchedCost(int[][]costs){inttotal0;intlengthcosts.length;intnlength/2;int[]differencesnewint[length];for(inti0;ilength;i){totalcosts[i][0];differences[i]costs[i][1]-costs[i][0];}Arrays.sort(differences);for(inti0;in;i){totaldifferences[i];}returntotal;}}复杂度分析时间复杂度O ( n log ⁡ n ) O(n \log n)O(nlogn)其中n nn是数组costs \textit{costs}costs的长度的一半。数组costs \textit{costs}costs的长度是2 n 2n2n计算数组differences \textit{differences}differences需要O ( 2 n ) O ( n ) O(2n) O(n)O(2n)O(n)的时间将数组differences \textit{differences}differences排序需要O ( 2 n log ⁡ ( 2 n ) ) O ( n log ⁡ n ) O(2n \log (2n)) O(n \log n)O(2nlog(2n))O(nlogn)的时间排序之后遍历数组differences \textit{differences}differences的前n nn个元素需要O ( n ) O(n)O(n)的时间因此时间复杂度是O ( n log ⁡ n ) O(n \log n)O(nlogn)。空间复杂度O ( n ) O(n)O(n)其中n nn是数组costs \textit{costs}costs的长度的一半。创建数组differences \textit{differences}differences需要O ( 2 n ) O ( n ) O(2n) O(n)O(2n)O(n)的空间将数组differences \textit{differences}differences排序需要O ( log ⁡ ( 2 n ) ) O ( log ⁡ n ) O(\log (2n)) O(\log n)O(log(2n))O(logn)的递归调用栈空间因此空间复杂度是O ( n ) O(n)O(n)。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

DVWA SQL注入关卡全拆解:从手工注入到参数化查询防御 2026/9/26 2:36:27

DVWA SQL注入关卡全拆解:从手工注入到参数化查询防御

DVWA(Damn Vulnerable Web Application)的SQL Injection关卡,是我当年第一次真正理解"数据库查询还能这么被玩"的入门练习。这个靶场的精妙之处在于:它把同一个SQL注入漏洞,用四个安全级别喂到你面前&#x…

阅读更多 →
Spring Boot校园外卖平台实战:订单状态机与Redis缓存设计 2026/9/26 2:36:27

Spring Boot校园外卖平台实战:订单状态机与Redis缓存设计

1. 项目整体设计与技术选型思路1.1 为什么选Spring Boot来做校园外卖平台聊到用Spring Boot做校园外卖平台系统,很多人的第一反应是“这不就是个课程作业吗”。其实把场景限定在校园里,这个系统的复杂度比我最初预想的高不少。校园外卖和普通外卖最大的区…

阅读更多 →
SpringBoot+Hadoop健康饮食推荐系统开发实战全解析 2026/9/26 2:36:27

SpringBoot+Hadoop健康饮食推荐系统开发实战全解析

不少人看到“SpringBoot Hadoop 推荐系统”这三个词凑在一起,第一反应是:这不就是典型的毕设标题配置吗?但真把这个题目落到实处,要趟的坑远比想象中多。我前阵子刚好完整做完了一个基于SpringBoot和Hadoop的健康饮食推荐系统&a…

阅读更多 →
SQLi-Labs Less-3详解:字符型注入中的单引号括号闭合与手工注入实战 2026/9/26 2:36:27

SQLi-Labs Less-3详解:字符型注入中的单引号括号闭合与手工注入实战

sqli-labs的Less-3,很多新手第一次卡住的地方其实不在注入本身,而在于那一层不太起眼的括号。Less-1和Less-2的教程满网都是,一到Less-3,很多人就丢给你一句“单引号加括号闭合”,然后就没有然后了。结果自己上手试的时…

阅读更多 →
SpringBoot+Vue+MySQL多媒体素材管理系统开发实战 2026/9/26 2:36:27

SpringBoot+Vue+MySQL多媒体素材管理系统开发实战

又到了每年的毕设和课设高峰期,后台经常有人问我“SpringBootVue能做什么项目”“有没有JavaMySQL的完整管理系统源码可以拿来学习”。这类问题问多了我发现一个规律:大家真正缺的不是代码,缺的是一个“能讲清楚、能跑起来、能应对答辩”的完…

阅读更多 →
终极指南:如何用Pyxel创建复古跳跃游戏(从零到完整项目) 2026/9/26 2:36:20

终极指南:如何用Pyxel创建复古跳跃游戏(从零到完整项目)

终极指南:如何用Pyxel创建复古跳跃游戏(从零到完整项目) 【免费下载链接】pyxel A retro game engine for Python 项目地址: https://gitcode.com/GitHub_Trending/py/pyxel Pyxel是一款专为Python设计的复古游戏引擎,让开…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉