class Allocator:
def __init__(self, n: int):
self.arr = [None] * n
def allocate(self, size: int, mID: int) -> int:
index_arr = [-1]
for i in range(len(self.arr)):
if self.arr[i] is not None:
index_arr.append(i)
index_arr.append(len(self.arr))
start = -1
for k in range(len(index_arr) - 1):
free_len = index_arr[k + 1] - index_arr[k] - 1
if free_len >= size:
start = index_arr[k] + 1
break
if start == -1:
return -1
for x in range(start, start + size):
self.arr[x] = mID
return start
def freeMemory(self, mID: int) -> int:
cnt = 0
for i, val in enumerate(self.arr):
if val == mID:
self.arr[i] = None
cnt += 1
return cnt
Y2xhc3MgQWxsb2NhdG9yOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG46IGludCk6CiAgICAgICAgc2VsZi5hcnIgPSBbTm9uZV0gKiBuCgogICAgZGVmIGFsbG9jYXRlKHNlbGYsIHNpemU6IGludCwgbUlEOiBpbnQpIC0+IGludDoKICAgICAgICBpbmRleF9hcnIgPSBbLTFdCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHNlbGYuYXJyKSk6CiAgICAgICAgICAgIGlmIHNlbGYuYXJyW2ldIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgaW5kZXhfYXJyLmFwcGVuZChpKQogICAgICAgIGluZGV4X2Fyci5hcHBlbmQobGVuKHNlbGYuYXJyKSkKCiAgICAgICAgc3RhcnQgPSAtMQogICAgICAgIGZvciBrIGluIHJhbmdlKGxlbihpbmRleF9hcnIpIC0gMSk6CiAgICAgICAgICAgIGZyZWVfbGVuID0gaW5kZXhfYXJyW2sgKyAxXSAtIGluZGV4X2FycltrXSAtIDEKICAgICAgICAgICAgaWYgZnJlZV9sZW4gPj0gc2l6ZToKICAgICAgICAgICAgICAgIHN0YXJ0ID0gaW5kZXhfYXJyW2tdICsgMSAgCiAgICAgICAgICAgICAgICBicmVhawoKICAgICAgICBpZiBzdGFydCA9PSAtMToKICAgICAgICAgICAgcmV0dXJuIC0xICAKCiAgICAgICAgZm9yIHggaW4gcmFuZ2Uoc3RhcnQsIHN0YXJ0ICsgc2l6ZSk6CiAgICAgICAgICAgIHNlbGYuYXJyW3hdID0gbUlECiAgICAgICAgcmV0dXJuIHN0YXJ0CgogICAgZGVmIGZyZWVNZW1vcnkoc2VsZiwgbUlEOiBpbnQpIC0+IGludDoKICAgICAgICBjbnQgPSAwCiAgICAgICAgZm9yIGksIHZhbCBpbiBlbnVtZXJhdGUoc2VsZi5hcnIpOgogICAgICAgICAgICBpZiB2YWwgPT0gbUlEOgogICAgICAgICAgICAgICAgc2VsZi5hcnJbaV0gPSBOb25lICAgCiAgICAgICAgICAgICAgICBjbnQgKz0gMQogICAgICAgIHJldHVybiBjbnQ=