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 & Try With Live Editor

Input

x
+
cmd
n = 3, k = 1

Output

x
+
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 & Try With Live Editor

Input

x
+
cmd
n = 3, k = 1

Output

x
+
cmd
[1,2,3]
Advertisements

Demonstration


Previous
#665 Leetcode Non-decreasing Array Solution in C, C++, Java, JavaScript, Python, C# Leetcode
Next
#668 Leetcode Kth Smallest Number in Multiplication Table Solution in C, C++, Java, JavaScript, Python, C# Leetcode