[LeetCode] Beautiful Arrangement II

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.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
public:
vector<int> constructArray(int n, int k) {
vector<int> res{1};
int l = 2, r = n;
bool add = true;
unordered_set<int> us{1};
while(--k) {
if(add) res.push_back(res.back() + k + 1);
else res.push_back(res.back() - k - 1);
add = !add;
us.insert(res.back());
}

for(int i = 1; i <= n; i++) if(!us.count(i)) res.push_back(i);
return res;
}
};
Author: Song Hayoung
Link: https://songhayoung.github.io/2022/05/30/PS/LeetCode/beautiful-arrangement-ii/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.