Bloomberg ||OA question || August 2022
Anonymous User
686

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 curr

print(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))

Comments (3)