Краткое описание задачи:
У каждого человека в очереди есть билеты, которые нужно купить. Каждую секунду
- Человек впереди покупает один билет.
- Если ему все еще нужны билеты, он перемещается в конец очереди.
Нам нужно найти, сколько секунд понадобится человеку с индексом k, чтобы закончить покупку своего билеты.
мой код:
Код: Выделить всё
public int timeRequiredToBuy(int[] tickets, int k) {
Queue queue = new LinkedList();
for (int i = 0; i < tickets.length; i++) {
queue.add(i);
}
int time = 0;
while (!queue.isEmpty()) {
int person = queue.poll();
if (!queue.isEmpty()) {
tickets[queue.peek()]--;
} else {
tickets[person]--;
}
time++;
if (tickets[person] > 0) {
queue.add(person);
}
if (person == k && tickets[person] == 0) {
break;
}
}
return time;
}
Код: Выделить всё
tickets =
[83,86,38,31,59,25,89,71,54,71,84]
k =1
Output
688
Expected
687
Подробнее здесь: https://stackoverflow.com/questions/798 ... -java-queu