1. 程式人生 > >JavaScript模擬執行緒池案例:超市收銀臺

JavaScript模擬執行緒池案例:超市收銀臺

超市中有一個顧客排成的佇列,等待結賬處理。

你的任務是寫一個函式計算顧客結賬所需的總時間。

函式包含兩個引數:

第一個引數是佇列,它裡面的每一個數字代表了一位顧客,數字的值是這位顧客結賬所需時間。

第二個引數是正整數,它表示收銀臺的數目。

假如某個收銀臺處於空閒狀態,立馬就會有隊頭的顧客出隊來結賬。

舉例如下:

	queueTime([5,3,4], 1);
	// 應該返回 12
	// 因為當只有一個收銀臺時, 總時間是每個時間的和

	queueTime([10,2,3,3], 2);
	// 應該返回 10
	// 當有兩個收銀臺時,第一位顧客佔據了第一個收銀臺10的時間
	// 第二,三,四位顧客,一共佔據了第二個收銀臺8的時間
	// 取最大的時間

注意:你得假定所有的輸入都是合法有效的,比如不會出現負數。

思路:

1.結賬的總時間,應該就是所有收銀臺中結賬所花最長的時間。

2.那麼,我用一個數組,記錄每一個收銀臺結賬的時間。

3.每次有顧客出隊,我就讓當前結賬時間最小的收銀臺去處理。

4.隊空了後,判斷哪個收銀臺結賬時間最長,作為總時間。

這樣的做法,就好比一個執行緒池的簡單實現策略。

function findMinIndex(array){
    var min = array[0];
    var minIndex = 0;
    for(var i=1;i<array.length;i++){
        if(array[i] < min){
            min = array[i];
            minIndex = i;
        }
    }
    return minIndex;
}

function queueTime(customers, n) {
    var array = [];
    for(var i=0;i<n;i++){
        array.push(0);
    }
    while(customers.length){
        var index = findMinIndex(array);
        array[index] = array[index] + customers.shift();
    }
    return Math.max.apply(null,array);
}


相關推薦

JavaScript模擬執行案例超市收銀臺

超市中有一個顧客排成的佇列,等待結賬處理。 你的任務是寫一個函式計算顧客結賬所需的總時間。 函式包含兩個引數: 第一個引數是佇列,它裡面的每一個數字代表了一位顧客,數字的值是這位顧客結賬所需時間。 第二個引數是正整數,它表示收銀臺的數目。 假如某個收銀臺處於空閒狀態,立馬就

執行 技術點 目錄 1. 執行作用 提升效能 1 2. 使用流程 1 3. 執行執行的監控 jvisual 1 4. 執行常用方法 2 5. 執行相關概念 2 5.1. 佇列

 池與執行緒池 技術點   目錄 1. 執行緒池作用:  提升效能 1 2. 使用流程 1 3. 執行緒與執行緒池的監控  jvisual 1 4. 執行緒常用方法 2 5. 執行緒池相關概念 2 5.1. 佇列 &n

深入理解Java執行(1)ThreadPoolExecutor整體流程梳理,建立worker相關方法

執行緒池作為一個執行緒的容器,主要的作用就是防止頻繁建立執行緒,節省時間資源和cpu資源。雖然一定程度上佔用了記憶體,但實際情況下利遠遠大於弊。 構造方法 public ThreadPoolExecutor( int corePoolSize, //核

java自定義模擬執行

java 執行緒池API提供了newCachedThreadPool() newFixedThreadPool(int) 等方法 1 public static ExecutorService newCachedThreadPool() { 2 return

使用ThreadGroup模擬執行

參考文章:                   [1]建立執行緒池 http://sunnylocus.iteye.com/blog/223327?page=2#comments                   [2]執行緒組ThreadGroup  http://hu

執行經典案例模仿儲戶取錢

銀行取錢肯定不能透支這個是眾所周知的,實現此功能就需要藉助多執行緒的知識! 先來看一下采取同步措施前產生的結果: 好的,我們先來定義一個賬戶類: /** * 賬戶類,含卡號,還有餘額 通過同步方法防止出現餘額為負的情況 * * @author Mr.Gao *

執行你必須要知道的執行submit()實現原理之FutureTask!

![FutureTask思維導圖.png](https://img2020.cnblogs.com/other/799093/202006/799093-20200601101441232-1248184493.png) ### 前言 上一篇內容寫了`Java`中執行緒池的實現原理及原始碼分析,說好的是實

Java執行執行基礎

最近精讀Netty原始碼,讀到NioEventLoop部分的時候,發現對Java執行緒&執行緒池有些概念還有困惑, 所以深入總結一下 ### 執行緒建立 Java執行緒建立主要有三種方式:繼承Thread類、實現Runable介面、實現Callable介面 只有通過呼叫``Thread.star

案例解析執行使用不當導致的系統崩潰

前幾天,發現一臺阿里雲伺服器上的Web服務不可用。遠端SSH登入不上,嘗試幾次登入上去之後,執行命令都顯示 -bash: fork: Cannot allocate memory 一看以為是記憶體洩漏導致溢位。因為執行不了任何命令, 只能通過控制檯重啟伺服器恢復服務。   

java記憶體、程序執行

記憶體池: 自定義記憶體池的思想通過這個"池"字表露無疑,應用程式可以通過系統的記憶體分配呼叫預先一次性申請適當大小的記憶體作為一個記憶體池,之後應用程式自己對記憶體的分配和釋放則可以通過這個記憶體池來完成。 只有當記憶體池大小需要動態擴充套件時,才需要再呼叫系統的記憶體分配函式,其他時間對

Java高階應用執行全面解析

  什麼是執行緒池?   很簡單,簡單看名字就知道是裝有執行緒的池子,我們可以把要執行的多執行緒交給執行緒池來處理,和連線池的概念一樣,通過維護一定數量的執行緒池來達到多個執行緒的複用。   執行緒池的好處 &n

沉澱再出發java中執行解析

沉澱再出發:java中執行緒池解析 一、前言    在多執行緒執行的環境之中,如果執行緒執行的時間短但是啟動的執行緒又非常多,執行緒運轉的時間基本上浪費在了建立和銷燬上面,因此有沒有一種方式能夠讓一個執行緒執行完自己的任務之後又被重複使用呢?執行緒池的出現就是為了解決這個問題。到了現在

Java併發程式設計4種執行和緩衝佇列BlockingQueue

一. 執行緒池簡介 1. 執行緒池的概念:           執行緒池就是首先建立一些執行緒,它們的集合稱為執行緒池。使用執行緒池可以很好地提高效能,執行緒池在系統啟動時即建立大量空閒的執行緒,程式將一個任務傳給執行緒池,執行緒池就會啟動一

初探佇列訊息普通http同步請求、基於執行的非同步請求、基於訊息佇列的請求三者的比較

最近忙完了手頭的專案,終於有時間研究之前一直落下的訊息隊列了,順帶手又看了一下多執行緒非同步請求,加上最傳統的http同步請求,正好可以拉出來做個比較,廢話不多說,走起! 場景設計:三個使用者同時向系統傳送一個請求,要求系統進行處理; 通過這個場景設計,我們來看看不同請求方式的表現:

Python標準模組--concurrent.futures模組(ThreadPoolExecutor執行,提供非同步呼叫、ProcessPoolExecutor: 程序,提供非同步呼叫)

目錄 ProcessPoolExecutor: 程序池 ThreadPoolExecutor:執行緒池  map的用法  回撥函式 https://docs.python.org/dev/library/concurrent.futures.html

muduo原始碼分析ThreadPool 執行的實現

原始碼: https://github.com/chenshuo/muduo/blob/master/muduo/base/ThreadPool.h https://github.com/chenshuo/muduo/blob/master/muduo/base/ThreadPool.cc

springboot2.0+執行+Jmeter以模擬高併發

宣告:原創在這裡https://blog.csdn.net/u011677147/article/details/80271174,在此也謝謝哥們。 1、目錄結構   2、BusinessThread.java package com.cn.commodity.config; i

JDK併發包-執行複用執行

為了避免系統頻繁地建立和銷燬執行緒,我們可以讓建立的執行緒進行復用。執行緒池中,總有那麼幾個活躍執行緒。當你需要使用執行緒時,可以從池子中隨便拿一個空閒執行緒,當完成工作時,並不急著關閉執行緒,而是將整個執行緒退回到池子,方便其他人使用。 1.1 JDK對執行緒池的支援 JDK提供一

Java併發(二十一)執行實現原理 Java併發(十八)阻塞佇列BlockingQueue Java併發(十八)阻塞佇列BlockingQueue Java併發程式設計執行的使用

一、總覽 執行緒池類ThreadPoolExecutor的相關類需要先了解:  (圖片來自:https://javadoop.com/post/java-thread-pool#%E6%80%BB%E8%A7%88) Executor:位於最頂層,只有一個 execute(Runnab

Java併發執行實現原理

一、總覽 執行緒池類ThreadPoolExecutor的相關類需要先了解: Executor:位於最頂層,只有一個 execute(Runnable runnable) 方法,用於提交任務。 ExecutorService :在 Executor 介面的基礎上添加了很多的介面方法,提交任務