LeetCode 1057. 校园自行车分配(map有序+贪心)
文章目录
- 1. 题目
- 2. 解题
1. 题目
在由 2D 网格表示的校园里有 n 位工人(worker)和 m 辆自行车(bike),n <= m。所有工人和自行车的位置都用网格上的 2D 坐标表示。
我们需要为每位工人分配一辆自行车。在所有可用的自行车和工人中,我们选取彼此之间曼哈顿距离最短的工人自行车对 (worker, bike) ,并将其中的自行车分配給工人。
如果有多个 (worker, bike) 对之间的曼哈顿距离相同,那么我们选择工人索引最小的那对。
类似地,如果有多种不同的分配方法,则选择自行车索引最小的一对。
不断重复这一过程,直到所有工人都分配到自行车为止。
给定两点 p1 和 p2 之间的曼哈顿距离为 Manhattan(p1, p2) = |p1.x - p2.x| + |p1.y - p2.y|
。
返回长度为 n 的向量 ans,其中 a[i] 是第 i 位工人分配到的自行车的索引(从 0 开始)。
示例 1:
输入:workers = [[0,0],[2,1]], bikes = [[1,2],[3,3]]
输出:[1,0]
解释:
工人 1 分配到自行车 0,因为他们最接近且不存在冲突,工人 0 分配到自行车 1 。
所以输出是 [1,0]。
示例 2:
输入:workers = [[0,0],[1,1],[2,0]], bikes = [[1,0],[2,2],[2,1]]
输出:[0,2,1]
解释:
工人 0 首先分配到自行车 0 。
工人 1 和工人 2 与自行车 2 距离相同,因此工人 1 分配到自行车 2,工人 2 将分配到自行车 1 。
因此输出为 [0,2,1]。提示:
0 <= workers[i][j], bikes[i][j] < 1000
所有工人和自行车的位置都不相同。
1 <= workers.length <= bikes.length <= 1000
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/campus-bikes
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
- 贪心,先选择小的距离,选择了则记录已经有自行车的人,和自行车被访问过了
- 使用map,key有序,key 为距离,value 为 工人idx,自行车 idx
class Solution {public:vector<int> assignBikes(vector<vector<int>>& workers, vector<vector<int>>& bikes) {map<int,vector<vector<int>>> dis_w_b;int dis, count = 0;for(int i = 0; i < workers.size(); i++){for(int j = 0; j < bikes.size(); j++){dis = abs(workers[i][0]-bikes[j][0])+ abs(workers[i][1]-bikes[j][1]);dis_w_b[dis].push_back(vector<int>({i,j}));}}vector<bool> vis_b(bikes.size(), false);vector<int> ans(workers.size(), -1);for(auto it = dis_w_b.begin(); it != dis_w_b.end(); ++it){ //按距离从小到大for(int i = 0; i < it->second.size(); ++i){ //遍历该距离下所有的 组合if(ans[it->second[i][0]] != -1 || vis_b[it->second[i][1]])continue;//有自行车了,或者自行车被占用了ans[it->second[i][0]] = it->second[i][1];vis_b[it->second[i][1]] = true;if(++count == workers.size())break;}}return ans;}
};
1480 ms 144 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
LeetCode 1057. 校园自行车分配(map有序+贪心)相关推荐
- LeetCode 1066. 校园自行车分配 II(状态压缩DP)
文章目录 1. 题目 2. 解题 2.1 回溯超时 2.2 状态压缩DP 1. 题目 在由 2D 网格表示的校园里有 n 位工人(worker)和 m 辆自行车(bike),n <= m.所有工 ...
- leetcode1066 校园自行车分配II
leetcode1066 校园自行车分配II 题目描述 在由 2D 网格表示的校园里有 n 位工人(worker)和 m 辆自行车(bike),n <= m.所有工人和自行车的位置都用网格上的 ...
- LeetCode1066_校园自行车分配II_动态规划_位运算_Java
B站视频地址:https://www.bilibili.com/video/BV18G4y1a7d9/?vd_source=a0bea6f5def58dc5711647a825ed97b6 代码 cl ...
- 基于java+springboot+mybatis+vue+elementui的校园自行车租赁系统
项目介绍 许多先进国家早已致力于发展自行车替代高能耗.高排放的交通工具.然而传统落后的自行车租赁管理模式仍然在很大程度上制约了推行公共自行车租赁普及化和现代化的发展,成为更深层次的"软环境& ...
- LeetCode实战:合并两个有序数组
题目英文 Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. No ...
- LeetCode实战:寻找两个有序数组的中位数
题目英文 There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of th ...
- 基于jsp+mysql的JSP校园自行车租赁网站平台管理系统
运行环境: 最好是java jdk 1.8,我们在这个平台上运行的.其他版本理论上也可以. IDE环境: Eclipse,Myeclipse,IDEA都可以 tomcat环境: Tomcat 7.x, ...
- javaweb校园自行车租赁系统
校园自行车租赁系统主要是采用jsp的mvc技术.mysql数据库.Tomcat服务器作为开发平台,系统采用B/S结构进行开发.目标是实现一个以租赁为中心的校园自行车租赁系统,构建用户信息与账号,账号与 ...
- 基于java校园自行车租赁系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
基于java校园自行车租赁系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java校园自行车租赁系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 本源码技术栈 ...
最新文章
- 前后端分离后的前端时代
- Koa 中间件的执行
- 牛!这个省明确:科研人员平均薪酬水平 要高于企业管理人员!
- MySQL-数据操作-增删改查
- python 反爬策略_如何应对网站反爬虫策略?如何高效地爬大量数据?
- 读取xlsx,根据模板图片批量添加文字生成相关图片,如证书,奖状,名片等
- ubuntu 深度音乐播放器
- O'Stolz 定理及其应用
- mysql角色权限关系表查询_用户、角色和权限,多表查询
- HBase -ROOT-和.META.表结构(region定位原理)
- Altium Designer19(AD19)
- 悟空crm配置mysql_超简单的悟空crm安装教程!看完不信你不会
- 文献阅读-Clinical and Biological subtypes of B-cell lymphoma revealed by microenvironment signature
- [C++实现 设计模式(14)] : 门面模式
- 不同vlan间的通信--三层交换技术
- 就业技术书文件表格_《就业规划书》模板
- “三通”搭桥 两岸IT产业迎机遇
- SECOND: Sparsely Embedded Convolutional Detection 论文笔记
- ESXi与物理交换机静态链路聚合配置过程中的小陷阱
- 软文推广高质量的新闻媒体网站都有哪些_软文管家
热门文章
- 【机器学习】自己手写实现线性回归,梯度下降 原理
- word文档打印 自动编码_办公室文件打印有哪些技巧 办公室文件打印技巧介绍【图文】...
- C/C++宏的使用总结
- 小米 android 8,小米华为们谁最良心?10大手机厂商安卓8.0升级情况盘点
- 计算机用户登录设置成2000,2008计算机等级考试:Windows2000系统选项设置
- Android初学第21天
- uC/OS-II源码分析(二)
- c语言错误解析-变量声明
- [Linux]Linux应用程序中添加强制中断处理
- 超有用的方法-----英语单词记忆篇