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阿明),一起加油、一起学习进步!
Michael阿明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474456.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux配ipv6 ipv4 双栈,RouterOS配置原生IPv6(电信IPv4/IPv6双栈)

无意中发现江苏(苏州)电信的原生IPv6改为有状态的IPv6&#xff0c;那么我使用的RouterOS软路由(以下简称ROS)就可以获取到IPv6的地址了&#xff0c;所以又可以折腾了一波。一、IPv6介绍IPv6的地址共有128位&#xff0c;也就是IPv6地址总量一共有2的128次方个地址。/32、/48是IP…

LeetCode 555. 分割连接字符串

文章目录1. 题目2. 解题1. 题目 给定一个字符串列表&#xff0c;你可以将这些字符串连接成一个循环字符串&#xff0c;对于每个字符串&#xff0c;你可以选择是否翻转它。 在所有可能的循环字符串中&#xff0c;你需要分割循环字符串&#xff08;这将使循环字符串变成一个常规…

LeetCode 314. 二叉树的垂直遍历(BFS/DFS)

文章目录1. 题目2. 解题2.1 DFS2.2 BFS1. 题目 给定一个二叉树&#xff0c;返回其结点 垂直方向&#xff08;从上到下&#xff0c;逐列&#xff09;遍历的值。 如果两个结点在同一行和列&#xff0c;那么顺序则为 从左到右。 示例 1&#xff1a; 输入: [3,9,20,null,null,15…

Android 利润,惊人利润:Android系统免费背后影藏的巨大利润

Android用户群体的庞大数量有目共睹&#xff0c;并且Android一直以免费为噱头&#xff0c;如果是一直免费&#xff0c;那么Android背后庞大的团队是靠什么经济来源支撑着Android一代又一代的更新&#xff1f;近日有网友披露谷歌的Android系统已经创造了310亿美元的营收&#xf…

LeetCode 336. 回文对(哈希map/Trie树)

文章目录1. 题目2. 解题2.1 哈希map2.2 Trie树1. 题目 给定一组唯一的单词&#xff0c; 找出所有不同 的索引对(i, j)&#xff0c;使得列表中的两个单词&#xff0c; words[i] words[j] &#xff0c;可拼接成回文串。 示例 1: 输入: ["abcd","dcba",&qu…

Android8.0一键root,小米Mix 2(安卓8.0)一键ROOT详解教程,看教程ROOT

伴随着安卓刷机越来越流行&#xff0c;很多安卓用户都喜欢上了这种可以自定个性系统的行为&#xff0c;那么小米Mix 2(安卓8.0)怎么获取ROOT权限?小米Mix 2(安卓8.0)一键ROOT过程如何操作呢?奇兔小编在此大家说一说1.首先打开奇兔刷机软件&#xff0c;插好数据线&#xff0c;…

刷机后如何升级android,手机系统怎么升级 三大方法大全【图文】

最近小编收到网友的问题&#xff0c;提到安卓手机系统怎么升级。对于这个问题&#xff0c;小编可是绞尽脑汁在网络上查找了好多资料&#xff0c;通过查阅资料&#xff0c;小编发现安卓系统升级多数是手机自动升级、或者通过手机自带的软件商店下载升级包。小编觉得这两种种方法…

LeetCode 1059. 从始点到终点的所有路径(回溯)

文章目录1. 题目2. 解题1. 题目 给定有向图的边 edges&#xff0c;以及该图的始点 source 和目标终点 destination&#xff0c;确定从始点 source 出发的所有路径是否最终结束于目标终点 destination&#xff0c;即&#xff1a; 从始点 source 到目标终点 destination 存在至…

[转载]MVVM、MVVMLight、MVVMLight Toolkit之我见

本文转自 陈希章-MVVM、MVVMLight、MVVMLight Toolkit之我见 MVVM、MVVMLight、MVVMLight Toolkit之我见 我想&#xff0c;现在已经有不少朋友在项目中使用了MVVMLight了吧&#xff0c;如果你正在做WPF&#xff0c;Silverlight&#xff0c;Windows Phone的开发&#xff0c;那么…

LeetCode 1058. 最小化舍入误差以满足目标(排序+贪心)

文章目录1. 题目2. 解题1. 题目 给定一系列价格 [p1,p2…,pn] 和一个目标 target&#xff0c;将每个价格 pi 舍入为 Roundi(pi) 以使得舍入数组 [Round1(p1),Round2(p2)...,Roundn(pn)] 之和达到给定的目标值 target。每次舍入操作 Roundi(pi) 可以是向下舍 Floor(pi) 也可以是…

LeetCode 1055. 形成字符串的最短路径(贪心)

文章目录1. 题目2. 解题1. 题目 对于任何字符串&#xff0c;我们可以通过删除其中一些字符&#xff08;也可能不删除&#xff09;来构造该字符串的子序列。 给定源字符串 source 和目标字符串 target&#xff0c;找出源字符串中能通过串联形成目标字符串的子序列的最小数量。…

html语言重点,HTML 基础重点(1)

什么是 HTML&#xff1f;HTML 全名是「超文本标记语言」(HyperText Markup Language)&#xff0c;最初是欧洲核子研究中心为了即时分享研究成果而发明了 www 万维网和 HTML。网页开发&#xff0c;涉及三种技术&#xff1a;HTML、CSS 和 JS。其中 HTML 是用于定义「网页的结构和…

[Kaggle] Housing Prices 房价预测

文章目录1. Baseline1. 特征选择2. 异常值剔除3. 建模预测2. 待优化特征工程房价预测 kaggle 地址 参考文章&#xff1a;kaggle比赛&#xff1a;房价预测&#xff08;排名前4%&#xff09; 1. Baseline import numpy as np import pandas as pd %matplotlib inline import m…

LeetCode 320. 列举单词的全部缩写(回溯/位运算)

文章目录1. 题目2. 解题2.1 回溯2.2 位运算1. 题目 请你写出一个能够举单词全部缩写的函数。 注意&#xff1a;输出的顺序并不重要。 示例&#xff1a; 输入: "word" 输出: ["word", "1ord", "w1rd", "wo1d", "wor1…

IIS 7.0 安装SSL证书过程

记录一下维瑞的技术人员在IIS 7.0 安装SSL证书过程。本文参照维瑞技术中心SSL证书安装文档所编&#xff1a;http://www.willrey.com/support/ Windows 2008 - IIS 7.0 SSL证书安装指南 在获取SSL证书前要做制作生成CSR文件&#xff0c;也就是SSL证书请求文件&#xff0c;当收到…

华为nova4是不是鸿蒙系统,华为nova 4手机什么时候可以升级鸿蒙系统?鸿蒙系统nova4升级时间介绍...

华为鸿蒙系统已经上线好久了&#xff0c;许多用户都已经抢先一步体验了&#xff0c;而最近有一部分使用华为nova4手机的用户跑来问我&#xff0c;自己的手机什么可以升级鸿蒙系统吗&#xff1f;什么时候才能升级&#xff1f;首先可以肯定的告诉大家&#xff0c;可以。具体内容下…

LeetCode 548. 将数组分割成和相等的子数组(哈希set)

文章目录1. 题目2. 解题1. 题目 给定一个有 n 个整数的数组&#xff0c;你需要找到满足以下条件的三元组 (i, j, k) &#xff1a; 0 < i, i 1 < j, j 1 < k < n - 1子数组 (0, i - 1)&#xff0c;(i 1, j - 1)&#xff0c;(j 1, k - 1)&#xff0c;(k 1, n …

html 仿ios选择控件,仿ios垂直滚动选择

注&#xff1a;必须在手机模式下才有效组件效果图组件效果图使用示例htmlcss.box{margin: 20px auto 20px auto;height: 188px;width: 90%;position: relative;}.box1{position: absolute;height: 100%;width: 60%;border-right: 1px solid #aaa;left: 0;}.box2{right: 0;posit…

LeetCode 469. 凸多边形(向量叉积)

文章目录1. 题目2. 解题1. 题目 给定一个按顺序连接的多边形的顶点&#xff0c;判断该多边形是否为凸多边形。 注&#xff1a; 顶点个数至少为 3 个且不超过 10,000。 坐标范围为 -10,000 到 10,000。 你可以假定给定的点形成的多边形均为简单多边形。 换句话说&#xff0c;保…