題目:?
現有一個服務器集群(服務器數量為 serverNum),和一批不同類型的任務(用數組 tasks 表示,下標表示任務類型,值為任務數量)。
現需要把這批任務都分配到集群的服務器上,分配規則如下:應業務安全要求,不同類型的任務不能分配到同一臺服務器上一種類型的多個任務可以分配在多臺服務器上
「負載」定義為某臺服務器所分配的任務個數,無任務的服務器負載為0。
「最高負載」定義為所有服務器中負載的最大值。
請你制定分配方案,使得分配后「最高負載」的值最小,并返回該最小值。
解答:
from typing import List
import math
class Solution:def get_need_server(self, tasks, load):need_server_num = 0for task in tasks:need_server_num += math.ceil(task / load)return need_server_numdef get_min_load(self, server_num: int, tasks: List[int]) -> int:left = 1right = max(tasks)while left <= right:mid = (left + right) // 2need_server_num = self.get_need_server(tasks, mid)# 負載太小,服務器不夠用if need_server_num > server_num:left = mid + 1# 負載太大,服務器沒有用完elif need_server_num < server_num:right = mid - 1else:right = mid - 1return left