題目如下:
給定兩個整數 n 和 k,你需要實現一個數組,這個數組包含從 1 到 n 的 n 個不同整數,同時滿足以下條件:
① 如果這個數組是 [a1, a2, a3, ... , an] ,那麼數組 [|a1 - a2|, |a2 - a3|, |a3 - a4|, ... , |an-1 - an|] 中應該有且僅有 k 個不同整數;.
② 如果存在多種答案,你只需實現並返回其中任意一種.
示例 1:
輸入: n = 3, k = 1
輸出: [1, 2, 3]
解釋: [1, 2, 3] 包含 3 個範圍在 1-3 的不同整數, 並且 [1, 1] 中有且僅有 1 個不同整數 : 1
示例 2:
輸入: n = 3, k = 2
輸出: [1, 3, 2]
解釋: [1, 3, 2] 包含 3 個範圍在 1-3 的不同整數, 並且 [2, 1] 中有且僅有 2 個不同整數: 1 和 2
方法一:
從第i個點開始,循環k次,每次逆轉i到n的元素,然後i+1。這樣的話,每逆轉一次,會產生一個不同的差值。代碼如下:
class Solution:
def constructArray(self, n: int, k: int) -> List[int]:
res = list(range(1, n + 1))
for i in range(1, k):
res[i:] = res[:i-1:-1]
return res
方法二:
對前k個元素操作(奇數位從1開始往裏面填數,1遞增,偶數位從n開始往裏面填數,n遞減),剩餘元素按順序從小到大向後排列即可。代碼如下:
class Solution:
def constructArray(self, n: int, k: int) -> List[int]:
arr, s, e, i = [], 1, n, 0
while(s <= e):
if((i < k and i % 2 == 0) or (i >= k and (k - 1) % 2 == 0)):
arr.append(s)
s += 1
else:
arr.append(e)
e -= 1
i += 1
return arr