Given an integer k and number n -n is size of time.
time[i] contains the arrival time of a person at a queue.
A person can enter the queue if size<=k at a time.
A person leaves the queue after 1 time unit.
Return the total time units for all persons to enter the queue and leave.
ex
k-2
n-4
time-[4,3,3,3]
at time 3, 2 people enter and a third person can also enter as length(queue)<=k
at time 4,one 3 leaves ,4 enters
at time 5- one 3 leaves
at time 6-one 3 leaves
at time 7-one 4 leaves,queue empty
ans-7
other testcase
k-2
n-4
time-[ 1,2,6,7]
ans-8
explanation
at time 1,1 enter
at time 2,2 enter 1 leave
at time 3-2 leave
at time 4- nothing
at time 5- nothing
at time 6-6 enter
at time 7-7 enter,6 leave
at time 8-7 leave
This is my code .Does anyone have better solution.
def times(time,k):
q=[]
curr=min(time) #curr=3
time.sort()
i=0
seen=[]
while(i<len(time) or q or len(seen)!=len(time)): #0 <
if(q):
q.pop(0)
if(not q and len(seen)==len(time)):
break
if(i<len(time)):
if(time[i]>curr):
curr+=1
continue
if(time[i]<curr and len(set(seen))==len(set(time))):
return curr+len(q)+1
if(time[i]<curr):
curr-=1
if(i<len(time)):
while(time[i]>=curr and len(q)<=k and i<len(time)): #time[0]>=3 and len(q)
q.append(time[i])
seen.append(time[i])
#print(seen)
i+=1
if(i==len(time)):
break
curr+=1
#print(curr)
return currprint(times([4,3,3,3],2))
print(times([1,2,6,7],2))
print(times([3,3,3,3],2))
print(times([3,3,3,3,6,7,8],2))