직원 목록을 추적하는 우선 순위 대기열이 있으며 처음에 정렬하기 위해 사용하는 비교기가 현재 "Invite Value"로 정렬합니다. 그래서 최대 초대 값 Employee를 선택하고 초대 한 다음 다음 최대 초대 값 직원을 다시 선택하겠습니다. 까다로운 부분은 특정 직원을 초대 한 후 목록에있는 다른 직원의 초대 값에 영향을 미친다는 것입니다. 나는 그것이 가치가 invValueChanged 필드의보고 초대 마지막을 기준으로 다시 계산 될 필요가 있다면 다음우선 순위 대기열에서 자체 정렬을 다시 수행하려면 어떻게해야합니까?
PriorityQueue<Employee> leafs = new PriorityQueue<>();
//populating the queue happens here
while(!leafs.isEmpty()){
Employee maxLeaf = leafs.peek();
int maxValue = maxLeaf.getInviteValue();
maxLeaf.invite();
totalValue += maxValue;
k--;
for(Employee e : leafs){
if(e.invValueChanged){
leafs.remove(e);
leafs.add(e);
}
}
}
각 직원이 알 시도했습니다. 이 코드는 우선 순위 대기열에 오류가 발생했습니다.
모두 사용하십시오. '모두 다시 입력하십시오.'PriorityQueue'는 정렬되지 않습니다. –
@SotiriosDelimanolis 너무 오래 걸릴 것입니다. 우선 순위 큐를 사용하여 효율성을 높이고 있습니다. 이 구조가 더 좋을까요? – ssaleem
_ 너무 오래 걸릴 것 _ 바로 현재하고있는 일이지만 잘못하고 있습니다. 반복되는 데이터 구조를 구조적으로 변경할 수는 없습니다. –