我在一些门户网站上进行测试,问题如下:
已经组建了一条线来购买音乐会门票。为了延迟经纪人购买大量门票造成的短缺,场地管理层决定一次只卖一张门票。如果买家想购买更多门票,他们必须再次排队等候。Jesse排队等候并购买了许多门票。 根据门票买家列表及其所需票数,确定Jesse购买门票需要多长时间。将陈述Jesse的排名,每笔交易需要1个单位时间。为了您的目的,没有时间花在移动到后面。 例如,如果票证要求的零索引数组,票证= [1,2,5]和Jesse的位置p = 1,则票证销售的前五秒如下所示:
功能说明
在下面的编辑器中完成函数waitingTime。该函数必须返回一个整数,表示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 5 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所以我认为必须有一些更优化的解决方案然后这个
发布于 2019-04-28 16:41:49
站在Jesse面前的每个人都必须支付相同数量的门票或更少的门票,在Jesse购买所有门票之前,身后的每个人都必须支付一个或多个门票:
let totalTime = 0;
for(const [pos, ticket] of tickets.entries())
totalTime += Math.min(ticket, tickets[p] - (pos > p));
https://stackoverflow.com/questions/-100009027
复制相似问题