Algorithm

Problem Name: 667. Beautiful Arrangement II

Given two integers `n` and `k`, construct a list `answer` that contains `n` different positive integers ranging from `1` to `n` and obeys the following requirement:

• Suppose this list is `answer = [a1, a2, a3, ... , an]`, then the list `[|a1 - a2|, |a2 - a3|, |a3 - a4|, ... , |an-1 - an|]` has exactly `k` distinct integers.

Return the list `answer`. If there multiple valid answers, return any of them.

Example 1:

```Input: n = 3, k = 1
Output: [1,2,3]
Explanation: The [1,2,3] has three different positive integers ranging from 1 to 3, and the [1,1] has exactly 1 distinct integer: 1
```

Example 2:

```Input: n = 3, k = 2
Output: [1,3,2]
Explanation: The [1,3,2] has three different positive integers ranging from 1 to 3, and the [2,1] has exactly 2 distinct integers: 1 and 2.
```

Constraints:

• `1 <= k < n <= 104`

Code Examples

#1 Code Example with Javascript Programming

```Code - Javascript Programming```

``````
const constructArray = function (n, k) {
const res = [1]
while (k) {
const index = res.length
if (index % 2 === 1) {
res.push(res[index - 1] + k)
} else {
res.push(res[index - 1] - k)
}
k -= 1
}
if (res.length < n) {
for (let i = res.length + 1; i  < = n; i += 1) {
res.push(i)
}
}
return res
}
``````
Copy The Code &

Input

cmd
n = 3, k = 1

Output

cmd
[1,2,3]

#2 Code Example with Python Programming

```Code - Python Programming```

``````
class Solution:
def constructArray(self, n, k):
"""
:type n: int
:type k: int
:rtype: List[int]
"""
left, right, res = 0, n+1, [None]*n
for i in range(n):
if k == 1:
if i%2 == 0:
while i<n: res[i], right, i = right - 1, right - 1, i + 1
else:
while i<n: res[i], left, i = left + 1, left + 1, i + 1
return res
else:
if i%2 != 0: res[i], right = right - 1, right - 1
else: res[i], left = left + 1, left + 1
if i != 0: k -= 1
``````
Copy The Code &

Input

cmd
n = 3, k = 1

Output

cmd
[1,2,3]