Algorithm
Problem Name: 667. Beautiful Arrangement II
Problem Link: https://leetcode.com/problems/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 exactlyk
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 &
Try With Live Editor
Input
n = 3, k = 1
Output
[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 &
Try With Live Editor
Input
n = 3, k = 1
Output
[1,2,3]