在由 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
所有工人和自行車的位置都不相同。
注意題目的資料範圍很小,說明這到題目的時間複雜度可以是o(n^2),這題使用直接了當的配對排序解法,將所有人與所有自行車配對,按照距離排序,如果距離相同,按照人的編號叫小,如果乙個人可以有多種選擇,按照自行車編號排序,最後選出滿足要求的一種分配方案即可
lass solution
};static bool cmp(const node &a, const node &b)
else
return a.distance < b.distance;
}public:
vectorassignbikes(vector>& workers, vector>& bikes)
}sort(mp.begin(),mp.end(),cmp);
int count = 0;
for(int i=0;i
if(count == n)
break;
}return res;}};
LeetCode 1057 校園自行車分配
在由 2d 網格表示的校園裡有n位工人 worker 和m輛自行車 bike n m。所有工人和自行車的位置都用網格上的 2d 座標表示。我們需要為每位工人分配一輛自行車。在所有可用的自行車和工人中,我們選取彼此之間曼哈頓距離最短的工人自行車對 worker,bike 並將其中的自行車分配給工人。如...
LeetCode 06 Z自行變換
題目描述 將乙個給定字串根據給定的行數,以從上往下 從左到右進行 z 字形排列。比如輸入字串為 leetcodeishiring 行數為 3 時,排列如下 l c i r e t o e s i i g e d h n之後,你的輸出需要從左往右逐行讀取,產生出乙個新的字串,比如 lciretoesi...
自行整理 網路流24題題解
編號題目 模型備註 有題解 1飛行員配對方案問題 最大流解決 2太空飛行計畫問題 未解決3 最小路徑覆蓋問題 最大流解決 4魔術球問題 未解決5 圓桌問題 最大流解決 6最長不下降子串行問題 最大流解決 7試題庫問題 最大流解決 8機械人路徑規劃問題 未解決9 方格取數問題 最小割解決 10餐巾計畫...