Given two integers n and k, you need to construct a list which contains n different positive integers ranging from 1 to n and obeys the following requirement:
Suppose this list is [a1, a2, a3, … , an], then the list [|a1 - a2|, |a2 - a3|, |a3 - a4|, … , |an-1 - an|] has exactly k distinct integers.
If there are multiple answers, print any of them.
题意:给定两个数n和k,将1~n中的数排列,使得排列后相邻数的差的绝对值有k种不同的数。
思路:按照1,k+1,2,k,3,k-1,……的顺序排列,得到的差值为k,k-1,k-2,……,1。
时间复杂度O(n)
class Solution {
public:
vector<int> constructArray(int n, int k) {
int l = 1, r = k + 1;
vector<int> ans;
while (l <= r) {
ans.push_back(l++);
if (l <= r) ans.push_back(r--);
}
for (int i = k + 2; i <= n; i++)
ans.push_back(i);
return ans;
}
};