生活随笔
收集整理的這篇文章主要介紹了
LeetCode 1057. 校园自行车分配(map有序+贪心)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
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有序+贪心)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。