题目简介:
给你两个整数 n
和 k
,请你构造一个答案列表 answer
,该列表应当包含从 1
到 n
的 n
个不同正整数,并同时满足下述条件:
- 假设该列表是
answer = [a1, a2, a3, ... , an]
,那么列表[|a1 - a2|, |a2 - a3|, |a3 - a4|, ... , |an-1 - an|]
中应该有且仅有k
个不同整数。
返回列表 answer
。如果存在多种答案,只需返回其中 任意一种 。
示例 1:
1 | 输入:n = 3, k = 1 |
提示:
1 <= k < n <= 10^4
思路:
有点脑筋急转弯的感觉
当k = 1
时,我们只需要像[1, 2, 3 , ...., n]
这样排列即可
当k = n - 1
时,我们需要将其按[1, n, 2, n - 1, 3, ....]
,这样就会出现n - 1
个不同的差值
所以,当我们需要k
个不同差值的时候,我们只需要在数组的前半部分按照k = 1
的情况进行排列,在后半部分按照k - n - 1
的情况进行排列即可,最后数组就会变成[1, 2, ..., n - k - 1, n - k, n, n - k + 1, n - 1, ....]
。
即前半部分为1
个不同差值,后半部分为k
个不同差值(一共为k + 1
个元素)(其中一个差值与前半部分相同),所以最后为k
个不同差值。
tip:
- 注意当
n - k + ?
和n - ?
相等时,只需要压入一次元素即可(此时也是遍历的末尾)。
代码如下:
1 | class Solution { |