-
Notifications
You must be signed in to change notification settings - Fork 461
Expand file tree
/
Copy path281_Zigzag_Iterator.py
More file actions
90 lines (75 loc) · 2.3 KB
/
Copy path281_Zigzag_Iterator.py
File metadata and controls
90 lines (75 loc) · 2.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
from collections import deque
# Naive brute force solution
class ZigzagIterator(object):
def __init__(self, v1, v2):
"""
Initialize your data structure here.
:type v1: List[int]
:type v2: List[int]
"""
self.queue = deque()
for v in [v1, v2]:
if v:
self.queue.append(deque(v))
print("__init__ - self.queue: ", self.queue)
def next(self):
"""
:rtype: int
"""
# print("-------")
# print("self.queue: ", self.queue)
currentV = self.queue.popleft()
returnVal = currentV.popleft()
if currentV:
self.queue.append(currentV)
return returnVal
def hasNext(self):
"""
:rtype: bool
"""
return True if self.queue else False
# Your ZigzagIterator object will be instantiated and called as such:
# i, v = ZigzagIterator(v1, v2), []
# while i.hasNext(): v.append(i.next())
from collections import deque
# without modifing the original input
from collections import deque
class ZigzagIterator(object):
def __init__(self, v1, v2):
"""
Initialize your data structure here.
:type v1: List[int]
:type v2: List[int]
"""
self.queue = deque()
for v in [v1, v2]: # For the follow up question, simply just all the array here like v1, v2,...vk
if v:
self.queue.append((deque(v), 0))
def next(self):
"""
:rtype: int
"""
self.hasNext()
currentV, posistion = self.queue.popleft()
if posistion < len(currentV):
returnVal = currentV[posistion]
self.queue.append((currentV, posistion + 1))
return returnVal
def hasNext(self):
"""
:rtype: bool
"""
currentQueue = self.queue
returnVal = False
while currentQueue:
currentV, position = self.queue[0]
if currentV and position < len(currentV):
returnVal = True
break
else:
returnVal = False
self.queue.popleft()
return returnVal
# Your ZigzagIterator object will be instantiated and called as such:
# i, v = ZigzagIterator(v1, v2), []
# while i.hasNext(): v.append(i.next())