Skip to content

Commit 20cd111

Browse files
committed
Time: 3650 ms (100%), Space: 38.1 MB (100%) - LeetHub
1 parent 12604e1 commit 20cd111

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# time complexity: O(n)
2+
# space complexity: O(n)
3+
from typing import List
4+
5+
6+
class Solution:
7+
def lexSmallestNegatedPerm(self, n: int, target: int) -> List[int]:
8+
S = n * (n + 1) // 2
9+
if (S - target) < 0 or (S - target) % 2 != 0:
10+
return []
11+
sumPNeg = (S - target) // 2
12+
if sumPNeg < 0 or sumPNeg > S:
13+
return []
14+
pNeg = set()
15+
currSum = 0
16+
17+
for i in range(n, 0, -1):
18+
if currSum + i <= sumPNeg:
19+
pNeg.add(i)
20+
currSum += i
21+
if currSum != sumPNeg:
22+
return []
23+
pNegList = sorted(list(pNeg), reverse=True)
24+
pPosSet = set(range(1, n + 1)) - pNeg
25+
pPosList = sorted(list(pPosSet), reverse=True)
26+
result = []
27+
for _ in range(n):
28+
candidateNeg = float('inf')
29+
if pNegList:
30+
candidateNeg = -pNegList[0]
31+
candidatePos = float('inf')
32+
if pPosList:
33+
candidatePos = pPosList[-1]
34+
if candidateNeg <= candidatePos:
35+
result.append(candidateNeg)
36+
pNegList.pop(0)
37+
else:
38+
result.append(candidatePos)
39+
pPosList.pop()
40+
return result
41+
42+
43+
n = 3
44+
target = 0
45+
print(Solution().lexSmallestNegatedPerm(n, target))
46+
n = 1
47+
target = 10000000000
48+
print(Solution().lexSmallestNegatedPerm(n, target))

0 commit comments

Comments
 (0)