檢查Python中是否所有人員都能在兩臺機器上投票
假設我們有一個數字n表示n個人,並且有兩臺相同的投票機。我們還有一個名為time大小為n的陣列,其中time[i]表示第i個人在任何機器上花費的總時間。在同一時間點,每臺機器上只能有一人。我們還有一個值x,表示機器可執行的最大允許時間,我們必須檢查是否所有人員都能投票。
因此,如果輸入類似於n = 3,x = 7,time = [3, 5, 3],則輸出為True。因為在時間t0,第0個人去第一臺機器,第1個人去第二臺機器。現在在時間t3,第一臺機器空閒。現在第2個人去第一臺機器,在時間t5第二臺機器空閒,在時間t6第一臺機器空閒,所以所有參與者都在規定時間內投票。
為了解決這個問題,我們將遵循以下步驟:
- total_sum := time所有元素的總和
- 如果total_sum <= x,則
- 返回True
- 對列表time進行排序
- prev_sum := 一個與time大小相同的陣列,並填充0
- prev_sum[0] := time[0]
- 對於範圍從1到prev_sum大小的i,執行:
- prev_sum[i] := prev_sum[i - 1] + time[i]
- 對於範圍從0到prev_sum大小的i,執行:
- 對於範圍從i + 1到prev_sum大小-1的j,執行:
- temp_sum := prev_sum[i] + (total_sum - prev_sum[j])
- 如果temp_sum <= x並且total_sum - temp_sum <= x,則
- 返回True
- 對於範圍從i + 1到prev_sum大小-1的j,執行:
- 返回False
讓我們看看下面的實現來更好地理解:
示例
def solve(n, x, time): total_sum = sum(time) if total_sum <= x: return True time.sort() prev_sum = [0 for i in range(len(time))] prev_sum[0] = time[0] for i in range(1, len(prev_sum)): prev_sum[i] = prev_sum[i - 1] + time[i] for i in range(0, len(prev_sum)): for j in range(i + 1, len(prev_sum)): temp_sum = (prev_sum[i] + (total_sum - prev_sum[j])) if temp_sum <= x and total_sum - temp_sum <= x: return True return False n = 3 x = 7 time = [3, 5, 3] print(solve(n, x, time))
輸入
3, 7, [3, 5, 3]
輸出
True
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP