前往
大廳
主題

LeetCode - 2462. Total Cost to Hire K Workers 解題心得

Not In My Back Yard | 2023-10-01 12:00:15 | 巴幣 0 | 人氣 79

題目連結:


題目意譯:
你被給定一個索引值從 0 開始整數陣列 costs,其中 costs[i] 為雇用第 i 位員工的成本。

你同時也被給定兩整數 k 和 candidates。我們想要根據以下規則雇用恰好 k 位員工:
你將執行 k 次會議並在每次會議雇用恰好一位員工。
在每次雇用會議之中,從前 candidates 位和最後 candidates 位候選者之中選擇成本最低的員工。如果平手則選擇索引值最小者。
    例如說,如果 costs = [3,2,7,7,1,2] 和 candidates = 2,則在第一次雇用會議中,我們將選擇第 4 位員工因為它有最低的成本 [3,2,7,7,1,2]。
    在第二次雇用會議中,我們將選擇第 1 位員工因為它跟第 4 位員工一樣有最低的成本但索引值最小 [3,2,7,7,1,2]。注意到索引值在過程中可能有所改變。
如果現在剩餘員工少於 candidates 位,則選擇成本最低者。如果平手則選擇索引值最小者。
每位員工只能被選到一次。

回傳雇用恰好 k 位員工的總成本。

限制:
1 ≦ costs.length ≦ 10 ^ 5
1 ≦ costs[i] ≦ 10 ^ 5
1 ≦ k, candidates ≦ costs.length



範例測資:
範例 1:
輸入: costs = [17,12,10,2,7,2,11,20,8], k = 3, candidates = 4
輸出: 11
解釋: 我們總共雇用 3 位員工。一開始總成本為 0。
- 在第一次雇用會議中我們從 [17,12,10,2,7,2,11,20,8] 選出員工。最低成本為 2,而因為有平手因此我們選索引值最小者,其值為 3。總成本為 = 0 + 2 = 2。
- 在第二次雇用會議中我們從 [17,12,10,7,2,11,20,8] 選出員工。最低成本為 2(索引值 4)。總成本為 = 2 + 2 = 4。
- 在第三次雇用會議中我們從 [17,12,10,7,11,20,8] 選出員工。最低成本為 7(索引值 3)。總成本為 = 4 + 7 = 11。注意到索引值 3 的員工同時位於前四位以及末四位候選者中。
總雇用成本為 11。

範例 2:
輸入: costs = [1,2,4,1], k = 3, candidates = 3
輸出: 4
解釋: 我們總共雇用 3 位員工。一開始總成本為 0。
- 在第一次雇用會議中我們從 [1,2,4,1] 選出員工。最低成本為 1,而因為有平手因此我們選索引值最小者,其值為 0。總成本為 = 0 + 1 = 1。注意到索引值 1 和 2 同時出現於前 3 位與末 3 位員工。
- 在第二次雇用會議中我們從 [2,4,1] 選出員工。最低成本為 1(索引值 2)。總成本為 = 1 + 1 = 2。
- 在第三次雇用會議中,剩餘不到三位候選人。我們將從剩餘員工 [2,4] 中選擇。最低成本為 2(索引值 0)。總成本為 = 2 + 2 = 4)。
總雇用成本為 4。


解題思維:
就直接模擬即可,也就是說直接用一個優先佇列(Priority Queue)來處理每一次雇用會議中要選出的員工。

每一次就從佇列中取出成本最小且索引值最小者。之後則為下一次雇用會議(如果有的話)準備下一批候選。也就是說,如果剛剛選出的人是在左側的,則從左側再多選一個人;而如果剛剛選出的人是在右側,則從右側再多選一個人;又如果兩側已經重疊了,則代表沒有多餘的人可以進來候選了。

因此就重複此步驟直到 k 次會議結束為止即可。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

相關創作

更多創作