Given an integer n, find a sequence that satisfies all of the following:
The integer 1 occurs once in the sequence.
Each integer between 2 and n occurs twice in the sequence.
For every integer i between 2 and n, the distance between the two occurrences of i is exactly i.
The distance between two numbers on the sequence, a[i] and a[j], is the absolute difference of their indices, |j - i|.
Return the lexicographically largest sequence. It is guaranteed that under the given constraints, there is always a solution.
A sequence a is lexicographically larger than a sequence b (of the same length) if in the first position where a and b differ, sequence a has a number greater than the corresponding number in b. For example, [0,1,9,0] is lexicographically larger than [0,1,5,6] because the first position they differ is at the third number, and 9 is greater than 5.
n = 3
class Solution:
def constructDistancedSequence(self, n: int) -> List[int]:
size = 2 * n - 1
ans = [0] * size
shown = set()
def backtrack(position: int):
if position == len(ans):
return True
for number in range(n, 0, -1):
if number in shown:
continue
if number != 1 and (number + position >= len(ans) or ans[number + position] != 0):
continue
shown.add(number)
ans[position] = number
if number != 1:
ans[position + number] = number
new_position = position + 1
while new_position < len(ans) and ans[new_position] != 0:
new_position += 1
if backtrack(new_position):
return True
shown.remove(number)
ans[position] = 0
if number != 1:
ans[position + number] = 0
backtrack(0)
return ans