首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在使用nodeJS时优化购买Show Tickets的算法

如何在使用nodeJS时优化购买Show Tickets的算法
EN

Stack Overflow用户
提问于 2019-04-28 07:06:47
回答 1查看 0关注 0票数 0

我在一些门户网站上进行测试,问题如下:

已经组建了一条线来购买音乐会门票。为了延迟经纪人购买大量门票造成的短缺,场地管理层决定一次只卖一张门票。如果买家想购买更多门票,他们必须再次排队等候。Jesse排队等候并购买了许多门票。 根据门票买家列表及其所需票数,确定Jesse购买门票需要多长时间。将陈述Jesse的排名,每笔交易需要1个单位时间。为了您的目的,没有时间花在移动到后面。 例如,如果票证要求的零索引数组,票证= [1,2,5]和Jesse的位置p = 1,则票证销售的前五秒如下所示:

IMG
IMG

功能说明

在下面的编辑器中完成函数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

约束

  • 1 <= n <= 10 5
  • 1 <= ticket [i] <= 10 9,其中0 <= i <n。
  • 0 <= p <n

样本输入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所以我认为必须有一些更优化的解决方案然后这个

测试
测试
EN

回答 1

Stack Overflow用户

发布于 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));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100009027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档