ArtyomKarpov
BAN USERThat shouldn't work because this code doesn't keep previous indexes of max element.
- ArtyomKarpov October 06, 2021{{
from heapq import heappop, heappush
class MyIterator:
def __init__(self, arrays):
self.arrays = arrays
self.mh = []
for i, arr in enumerate(self.arrays):
heappush(self.mh, (arr[0], 0, i))
def next(self):
if not self.hasNext():
raise Exception()
el, j, i = heappop(self.mh)
if j + 1 < len(self.arrays[i]):
heappush(self.mh, (self.arrays[i][j+1], j+1, i))
return el
def hasNext(self):
return len(self.mh) > 0
def test(arrays, expected):
mi = MyIterator(arrays)
res = []
while mi.hasNext():
res += [mi.next()]
print(f'test: {arrays} -> {res}')
assert res == expected, f'{res} == {expected}'
test([[1], [2]], [1,2])
test([[2], [1]], [1,2])
test([[1,5,7], [2,3,10], [4,6,9]], [1,2,3,4,5,6,7,9,10])
test([[1,5,7], [2,3,10]], [1,2,3,5,7,10])
}}
{{
- ArtyomKarpov October 06, 2021import random
def rand_index(arr):
maxe = arr[0]
indexes = [0]
res = [0]
for i, e in enumerate(arr[1:]):
i += 1
if e > maxe:
maxe = e
indexes = [i]
elif e == maxe:
indexes += [i]
res +=[indexes[random.randint(0, len(indexes)-1)]]
return res
def p(a):
return '\t'.join(str(e) for e in a)
print(p([11, 30, 2, 30, 30, 30, 6, 2, 62, 62]))
print(p(rand_index([11, 30, 2, 30, 30, 30, 6, 2, 62, 62])))
}}