遇到一个题目大约是这样的:一个任务分配系统,其中的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) );
}
}