# A. A Number After a Double Reversal (opens new window)
Check if it has any trailing 0
.
DETAILS
bool isSameAfterReversals(int num) {
return num == 0 || num % 10;
}
public boolean isSameAfterReversals(int num) {
return num == 0 || num % 10 != 0;
}
def isSameAfterReversals(self, num: int) -> bool:
return num == 0 or str(num)[-1] != '0'
# B. Execution of All Suffix Instructions Staying in a Grid (opens new window)
Do as it says.
DETAILS
def executeInstructions(self, n: int, startPos: List[int], s: str) -> List[int]:
dirs = {'R': (0, 1), 'L': (0, -1), 'U': (-1, 0), 'D': (1, 0)}
def helper(idx):
ans = 0
cx, cy = startPos
for d in s[idx:]:
dx, dy = dirs[d]
if 0 <= cx + dx < n and 0 <= cy + dy < n:
cx += dx
cy += dy
ans += 1
else:
return ans
return ans
ans = []
for i in range(len(s)):
ans.append(helper(i))
return ans
# C. Intervals Between Identical Elements (opens new window)
Prefix.
DETAILS
def getDistances(self, arr: List[int]) -> List[int]:
pos = collections.defaultdict(list)
for i, x in enumerate(arr):
pos[x].append(i)
def helper(A):
n = len(A)
if n == 1: return [0]
cur = 0
for i in range(1, n):
cur += A[i] - A[0]
ans = [cur]
for i in range(1, n):
cur += (A[i] - A[i - 1]) * (2 * i - n)
ans.append(cur)
return ans
res = {i : helper(pos[i]) for i in pos.keys()}
idx = {i : 0 for i in pos.keys()}
ans = []
for i, a in enumerate(arr):
ans.append(res[a][idx[a]])
idx[a] += 1
return ans
# D. Recover the Original Array (opens new window)
DETAILS
def recoverArray(self, A: List[int]) -> List[int]:
n = len(A)
A.sort()
def helper(k):
c = collections.Counter(A)
for key in A:
if c[key] == 0: continue
if c[key + k] == 0: return False
else:
c[key] -= 1
c[key + k] -= 1
return True
start = A[0]
for i in range(1, n):
if (A[i] - A[0]) % 2 == 0 and A[i] - A[0] > 0:
if helper(A[i] - A[0]):
ans = []
k = A[i] - A[0]
c = collections.Counter(A)
for key in A:
if c[key] == 0:
continue
else:
ans.append(key + k // 2)
c[key] -= 1
c[key + k] -= 1
return ans