Why is deque slower when used in this python code compared to a list with pop(0)

74 Views Asked by At

popleft with deque is supposed to be O(1) and pop(0) from a list is supposed to be O(n), so why continually when I use a regular list over a queue do I get slower times on leetcode.

Here is both code samples solving a BFS problem on leetcode:

Deque:
if not root:
    return root
lev = 0
dummy = Node(0)
prev = dummy

q = deque()
q.append((root, 0))

while q:
    curr = q.popleft()
    print(curr[0].val)
    if curr[1] != lev:
        prev.next = None
        prev = curr[0]
        lev = curr[1]
    else:
        prev.next = curr[0]
        prev = curr[0]
    
    if curr[0].left:
        q.append((curr[0].left, curr[1] + 1))
    if curr[0].right:
        q.append((curr[0].right, curr[1] + 1))


prev.next = None
return dummy.next
Regular List:
if not root:
    return root
lev = 0
dummy = Node(0)
prev = dummy

q = []
q.append((root, 0))

while q:
    curr = q.pop(0)
    print(curr[0].val)
    if curr[1] != lev:
        prev.next = None
        prev = curr[0]
        lev = curr[1]
    else:
        prev.next = curr[0]
        prev = curr[0]
    
    if curr[0].left:
        q.append((curr[0].left, curr[1] + 1))
    if curr[0].right:
        q.append((curr[0].right, curr[1] + 1))


prev.next = None
return dummy.next

The regular list approach beat 30 percent versus 6 percent with deque.

0

There are 0 best solutions below