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.