原始題目如下:(5kyu)
There is a queue for the self-checkout tills at the supermarket. Your task is write a function to calculate the total time required for all the customers to check out!
input
customers: an array of positive integers representing the queue. Each integer represents a customer, and its value is the amount of time they require to check out.
n: a positive integer, the number of checkout tills.
output
The function should return an integer, the total time required.
翻譯:請支援收銀
顧客一一排隊等待結帳,結帳櫃台一次只能負責一個客人,需計算經過多久後可以消化完等待結帳的人潮。(有兩個傳入的參數,array
中的元素代表顧客,值代表替每一個顧客結帳所需的時間:n
代表結帳櫃台的數量)。
範例:
queueTime([5,3,4], 1)
// 總共三個顧客,開放1個櫃台
// 時間為5+3+4=12
// 回傳12
queueTime([2,3,10], 2)
// 總共三個顧客,開放2個櫃台
// 第一號及第二號客人分別到A、B櫃台進行結帳
// A-----2
// B-----3
// 2分鐘過去
// A櫃台空了,於是第三號客人到A櫃台進行結帳
// A-----10
// B-----1 (還有1分鐘就可替2號客人結完帳)
// 再過1分鐘
// A-----9
// B-----閒置
// 再過9分鐘
// A-----閒置
// B-----閒置
// 所需時間為2+1+9=12
// 回傳12
function queueTime(customers, n) {
if (customers.length === 0) return 0
let check = customers.splice(0, n)
customers.forEach(item => {
check[check.indexOf(Math.min(...check))] += item
})
return Math.max(...check)
}
check
為一陣列長度為n,代表結帳櫃台;值代表處理的顧客時間customers
前n個的元素移除並存至check
自首:其實一開始沒有頭緒該怎麼想,這個想法是上網看的概念,一看到馬上咻咻coding! 測試瞬過!
function queueTime(customers, n) {
var w = new Array(n).fill(0);
for (let t of customers) {
let idx = w.indexOf(Math.min(...w));
w[idx] += t;
}
return Math.max(...w);
}
解法相似!!
推推!有文章特地整理這題的思考方式The Supermarket Queue 減法思考 vs 加法思考
以上為今日分享的內容,若有錯誤或是建議,請再隨時和我聯繫。