换购过程是一条队列:每次队头的人买 1 枚徽章,没买完就排回队尾。直接模拟的时间与徽章总数同阶,在 n=105、medals[i]=109 时会超时。
关键观察是:目标球迷 k 一共要被服务 need=medals[k] 次,计时在他最后一次被服务时结束。把初始下标和这个次数对齐:
球迷排成一队换购世界杯徽章。换购规则如下:
给定每人需要换购的徽章数量数组 medals 和目标球迷下标 k,求当数组下标第 k 号球迷换完所有徽章时,总耗时为多少?
medals:长度为 n 的正整数数组,medals[i] 表示数组下标第 i 号球迷需要换购的徽章数;
k:目标球迷所在的数组下标,输入保证 0≤k<n;
输出一个整数,表示当数组下标第 k 号球迷换完所有徽章时的总耗时。
输入
[2, 3, 2], 2
输出
6
说明
初始队伍:[0号(2), 1号(3), 2号(2)],其中 2 号是目标球迷。
第 1 轮遍历:
队伍变为:[0号(1), 1号(2), 2号(1)]。
第 2 轮遍历:
2 号球迷已换完所有徽章,总耗时 =6。
输入
[1, 5, 3], 1
输出
9
说明
数组下标 1 号球迷需要换购 5 个徽章,第 1 轮结束 0 号离队(累计 3);第 3 轮结束 2 号离队(累计 3+2+2=7);第 5 轮结束 1 号全部换购(累计 3+2+2+1+1=9)。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册