我正在某个门户网站上进行测试,问题如下:
已经成立了一条线来购买音乐会门票。为了延迟经纪人购买大量门票造成的短缺,场地管理层决定一次只卖一张门票。如果买家想购买更多门票,他们必须再次排队等候。杰西站在队中并有许多门票可以购买。
根据门票买家列表及其所需门票数量,确定Jesse购买门票需要多长时间。将陈述Jesse的排名,每笔交易需要1个单位时间。为了您的目的,没有时间花在移动到后面。
例如,如果票证要求的零索引数组,票证= [1,2,5]和Jesse的位置p = 1,则票证销售的前五秒看起来像这样:
功能描述
在下面的编辑器中完成waitTime函数。该函数必须返回一个整数,表示Jesse购买所需票数的时间单位。
waitingTime具有以下参数:
tickets[tickets[0],...tickets[n-1]]: an array of tickets desired by each person at position tickets[i]
p: Jesse's position in line
约束
示例输入0
5 2 6 3 4 五 2
示例输出0
12
购买2张门票共花了12个单位。
我的解决方案如下:
function waitingTime(tickets, p) {
var totalTime = 0,
l = tickets.length,
frontPersonStatus;
while(true) {
if(p === 0 && tickets[0] === 1 && ++totalTime) break;
frontPersonStatus = tickets.shift() - 1;
frontPersonStatus !== 0 ? (tickets[tickets.length] = frontPersonStatus) : l -= 1;
totalTime++;
p = p === 0 ? l - 1 : p - 1;
}
return totalTime;
}
但它运行了一些测试用例后,所有其他测试用例都失败并说因超时而终止 .b所以我认为必须有一些更优化的解决方案然后这个< / em>的
答案 0 :(得分:2)
站在杰西面前的每个人都必须支付相同数量的门票或更少的门票,在杰西买下所有门票之前,身后的每个人都要支付一个或多个门票:
let totalTime = 0;
for(const [pos, ticket] of tickets.entries())
totalTime += Math.min(ticket, tickets[p] - (pos > p));