有
n
个人前来排队买票,其中第0
人站在队伍 最前方 ,第(n - 1)
人站在队伍 最后方 。给你一个下标从 0 开始的整数数组
tickets
,数组长度为n
,其中第i
人想要购买的票数为tickets[i]
。每个人买票都需要用掉 恰好 1 秒 。一个人 一次只能买一张票 ,如果需要购买更多票,他必须走到 队尾 重新排队(瞬间 发生,不计时间)。如果一个人没有剩下需要买的票,那他将会 离开 队伍。
返回位于位置
k
(下标从 0 开始)的人完成买票需要的时间(以秒为单位)。
第一次AC代码,时间复杂度O(N2)
class Solution {
public:
int timeRequiredToBuy(vector<int>& tickets, int k) {
int n=tickets.size();
vector<int>time(n,0);
vector<int>p(n,0);
int sum=0;
while(true)
{
if(tickets==p)
{
break;
}
for(int i=0;i<n;i++)
{
if(tickets[i]!=0)
{
tickets[i]-=1;
sum+=1;
time[i]=sum;
}
}
}
return time[k];
}
};
官方题解,时间复杂度:O(n)
class Solution {
public:
int timeRequiredToBuy(vector<int>& tickets, int k) {
int n = tickets.size();
int res = 0;
for (int i = 0; i < n; ++i){
// 遍历计算每个人所需时间
if (i <= k){
res += min(tickets[i], tickets[k]);
}
else{
res += min(tickets[i], tickets[k] - 1);
}
}
return res;
}
};
作者:力扣官方题解
链接:https://leetcode.cn/problems/time-needed-to-buy-tickets/solutions/1102684/mai-piao-xu-yao-de-shi-jian-by-leetcode-jnfxx/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。