-
-
Notifications
You must be signed in to change notification settings - Fork 299
/
284.py
139 lines (128 loc) · 3.93 KB
/
284.py
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
__________________________________________________________________________________________________
sample 28 ms submission
# Below is the interface for Iterator, which is already defined for you.
#
# class Iterator:
# def __init__(self, nums):
# """
# Initializes an iterator object to the beginning of a list.
# :type nums: List[int]
# """
#
# def hasNext(self):
# """
# Returns true if the iteration has more elements.
# :rtype: bool
# """
#
# def next(self):
# """
# Returns the next element in the iteration.
# :rtype: int
# """
class PeekingIterator:
def __init__(self, iterator):
"""
Initialize your data structure here.
:type iterator: Iterator
"""
self.peekingIterator = iterator
self.peeked = False
self._next = None
def peek(self):
"""
Returns the next element in the iteration without advancing the iterator.
:rtype: int
"""
if not self.peeked:
if self.peekingIterator.hasNext():
self._next = self.peekingIterator.next()
self.peeked = True
return self._next
def next(self):
"""
:rtype: int
"""
result = None
if self.peeked:
self.peeked = False
result = self._next
self._next = None
return result
else:
if self.peekingIterator.hasNext():
return self.peekingIterator.next()
def hasNext(self):
"""
:rtype: bool
"""
return self.peekingIterator.hasNext() or self.peeked
# Your PeekingIterator object will be instantiated and called as such:
# iter = PeekingIterator(Iterator(nums))
# while iter.hasNext():
# val = iter.peek() # Get the next element but not advance the iterator.
# iter.next() # Should return the same value as [val].
__________________________________________________________________________________________________
sample 13176 kb submission
# Below is the interface for Iterator, which is already defined for you.
#
# class Iterator:
# def __init__(self, nums):
# """
# Initializes an iterator object to the beginning of a list.
# :type nums: List[int]
# """
#
# def hasNext(self):
# """
# Returns true if the iteration has more elements.
# :rtype: bool
# """
#
# def next(self):
# """
# Returns the next element in the iteration.
# :rtype: int
# """
class PeekingIterator:
def __init__(self, iterator):
"""
Initialize your data structure here.
:type iterator: Iterator
"""
self.iterator = iterator
self.peek_flag = False
def peek(self):
"""
Returns the next element in the iteration without advancing the iterator.
:rtype: int
"""
if self.peek_flag:
return self.next_element
else:
self.next_element = self.iterator.next()
self.peek_flag = True
return self.next_element
def next(self):
"""
:rtype: int
"""
if self.peek_flag:
self.peek_flag = False
return self.next_element
else:
return self.iterator.next()
def hasNext(self):
"""
:rtype: bool
"""
if self.peek_flag:
return True
else:
return self.iterator.hasNext()
# Your PeekingIterator object will be instantiated and called as such:
# iter = PeekingIterator(Iterator(nums))
# while iter.hasNext():
# val = iter.peek() # Get the next element but not advance the iterator.
# iter.next() # Should return the same value as [val].
__________________________________________________________________________________________________