任务分配问题

    xiaoxiao2021-03-26  10

     

    遇到一个题目大约是这样的:一个任务分配系统,其中的worker进程同时只能处理一个任务且任务不能中断。   //Worker.java import java.util.ArrayList; import java.util.List; public class Worker { private int iIndex; private int iSum; private List<Integer> listJobs; public Worker( int iIndex, int iSum ) { this.iIndex = iIndex; this.iSum = iSum; listJobs = null; } public int getiIndex() { return iIndex; } public void setiIndex(int iIndex) { this.iIndex = iIndex; } public int getiSum() { return iSum; } public void setiSum(int iSum) { this.iSum = iSum; } public void addJob( int iJob ) { if( listJobs == null ) { listJobs = new ArrayList<Integer>(); } listJobs.add( new Integer( iJob )); iSum += iJob; } public List<Integer> getListJobs() { return listJobs; } @Override public String toString() { return "Worker [iIndex=" + iIndex + ", iSum=" + iSum + ", listJobs=" + listJobs + "]"; } }

     

     

     

     

     

     

    //DWork.java import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; public class DWork { public static int doWork( int iSrvCnt, int[] arrWorks ) { if( iSrvCnt <= 0 ) return -1; Arrays.sort( arrWorks ); if( arrWorks[0] <= 0 ) { return -2; } List<Worker> listWorkers = new ArrayList<Worker>(iSrvCnt); int i; for( i = 0; i < iSrvCnt; ++i ) { listWorkers.add( new Worker( i, 0 )); } Worker minWorker = null; for( i = arrWorks.length - 1; i >= 0; --i ) { minWorker = Collections.min(listWorkers, new Comparator(){ @Override public int compare(Object o1, Object o2) { Worker w1 = (Worker)o1; Worker w2 = (Worker)o2; if( w1.getiSum() < w2.getiSum() ) { return -1; } else if( w1.getiSum() > w2.getiSum()) { return 1; } return 0; } }); minWorker.addJob( arrWorks[i]); } minWorker = Collections.max(listWorkers, new Comparator(){ @Override public int compare(Object o1, Object o2) { Worker w1 = (Worker)o1; Worker w2 = (Worker)o2; if( w1.getiSum() < w2.getiSum() ) { return -1; } else if( w1.getiSum() > w2.getiSum()) { return 1; } return 0; } }); for( i = 0; i < listWorkers.size(); ++i ) { System.out.println( listWorkers.get(i ).toString() ); } return minWorker.getiSum(); } public static void main(String[] args) { int[] arrWorks = new int[5]; arrWorks[0] = 9; arrWorks[1] = 3; arrWorks[2] = 10; arrWorks[3] = 5; arrWorks[4] = 1; System.out.println( DWork.doWork(3, arrWorks) ); } }

     

     

     

     

     

    转载请注明原文地址: https://ju.6miu.com/read-500207.html

    最新回复(0)