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
Почему эта логика приводит к получению значения, превышающего ожидаемое? Как мне правильно отслеживать билеты для каждого человека, не уменьшая случайно неправильный билет?
У каждого человека в очереди есть билеты[i], которые нужно купить. Каждую секунду [list] [*]Человек впереди покупает [b]один билет[/b].
[*]Если ему все еще нужны билеты, он перемещается в конец очереди.
[/list] Нам нужно найти, сколько секунд понадобится человеку с индексом k, чтобы закончить покупку своего билеты. Мой код: [code]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; } [/code] [code]tickets = [83,86,38,31,59,25,89,71,54,71,84] k =1 Output 688 Expected 687 [/code] Почему эта логика приводит к получению значения, превышающего ожидаемое? Как мне правильно отслеживать билеты для каждого человека, не уменьшая случайно неправильный билет?