权重排序(java)Q:我们去饭店排队等号吃饭,每天最多100桌客人,这100桌客人拿到的排队号是不会重复的(1-100)。如果叫号一阵子没人应答,这桌客人就要被延号三桌。如果延号的情况比较多,饭店就很难根据排队号来准确的排序了,那么如何保证排序始终是对的呢?
Clue:不用排队号排序,而拓展出依赖排序号的权重(排队号*容量=权重)每当客人被延号就找出他们往后数两桌的客人的权重,在这个基础上+1,这样就算每桌客人都被延号也可以保证按权重排序不会乱了
import java.util.ArrayList;
import java.util.List;
public class WeightSort {
public void Test(){
List<Integer> voList = new ArrayList();
for(int i=0; i < 30; i++){
voList.add(i);
}
Integer QuqueStatus = 10;
Integer getWeightResult = this.updateWaitQueue(voList,QuqueStatus);
System.out.println(getWeightResult);
}
private Integer updateWaitQueue(List<Integer> voList,Integer QuqueStatus) {
int FirstMiss = 10;
//获取有序的appoId集合
List<Integer> appoIdList = new ArrayList();
for(int i=0; i < voList.size(); i++){
appoIdList.add(voList.get(i));
}
Integer nowDOAppId = 1;
Integer nowIndex = appoIdList.indexOf(nowDOAppId);
Integer targetIndex = null;
if(FirstMiss==QuqueStatus){
if(nowIndex == voList.size() - 1){
targetIndex = nowIndex + 1;
}
else{
targetIndex = nowIndex + 2;
}
}
Integer getWeightResult =0;
//
if(voList.size() != 1 && null != targetIndex){
getWeightResult = this.getNewWeight(targetIndex);
}
return getWeightResult;
}
//增加权重
private Integer getNewWeight(Integer targetIndex){
//参数校验省略
Integer nowNewWeight = targetIndex ++;
return nowNewWeight;
}
}