Python程式:查詢可組成的最大數量的K大小、包含不同型別專案的組
假設我們有一個名為counts的數字列表,其中counts[i]表示i型別專案的數量。我們還有一個值k。我們必須找到可以找到的最大數量的k大小的組,每個組必須包含不同型別的專案。
因此,如果輸入類似於counts = [2, 3, 5, 3] k = 2,則輸出將為6,因為設四種類型的專案分別由a、b、c、d表示。我們可以有以下k = 2的組,其中所有元素都是不同型別的:[(c, a), (b, a), (c, b), (c, b), (d, a), (d, a)]。
為了解決這個問題,我們將遵循以下步驟:
- 定義函式possible()。這將接收counts、groups、k。
- required := groups * k
- 對於i從0到counts的大小,執行:
- temp := counts[i]、groups和required中的最小值
- required := required - temp
- 如果required等於0,則
- 返回True
- 返回False
- 定義函式solve()。這將接收counts、k。
- res := 0
- l := 0
- r := counts中所有元素的總和
- 當l <= r時,執行:
- m := l + floor((r - l) / 2)
- 如果possible(counts, m, k)為真,則
- l := m + 1
- res := res和m中的最大值
- 否則,
- r := m - 1
- 返回res
示例
讓我們看下面的實現以更好地理解:
def possible(counts, groups, k): required = groups * k for i in range(len(counts)): temp = min(counts[i], groups, required) required -= temp if required == 0: return True return False def solve(counts, k): res = 0 l = 0 r = sum(counts) while l <= r: m = l + (r - l) // 2 if possible(counts, m, k): l = m + 1 res = max(res, m) else: r = m - 1 return res counts = [2, 3, 5, 3] k = 2 print(solve(counts, k))
輸入
[2, 3, 5, 3], 2
輸出
6
廣告