Google面試題:人和自行車匹配

題目參考這裏,也是leetcode-cn舉辦的編程大賽的一道題,只想到了暴力法解決,超時了:

# -*- coding:utf-8 -*-
__author__ = 'ShawDa'

class Solution:
    def assignBikes(self, workers, bikes):
        res, dis_dict, index = [0]*len(workers), {}, list(range(len(workers)))
        for i, worker in enumerate(workers):
            for x, y in bikes:
                dis_dict[i] = dis_dict.get(i, []) + [(abs(worker[0]-x)+abs(worker[1]-y))]
        for _ in range(len(workers)):
            min_list = [float('inf')]*len(workers)
            for i in index:
                min_list[i] = min(dis_dict[i])
            ret = min_list.index(min(min_list))  # 工人號碼
            bike_index = dis_dict[ret].index(min(min_list))
            for k, v in dis_dict.items():
                v[bike_index] = float('inf')
            res[ret] = bike_index
            index.remove(ret)
        return res

print(Solution().assignBikes([[0,0],[2,1]], [[1,2],[3,3]]))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章