Discription
给定两个整数n
和k
,构建一个n
个元素数组,数组要满足一下要求:
假设数组[a1,a2....an]
那么[|a2-a1|,|a3-a2|.....]
包含k
个不同的整数。如果有多个数组输出任意一个数组。1<=k<n<=10000
。
Example
Input: n = 3, k = 1
Output: [1, 2, 3]
Input: n = 3, k = 2
Output: [1, 3, 2]
Solution
给定n
那么k最大为n-1
,假设这k
个数字是 n-1,n-2,n-3...1
,所以数列可以是1,n-1,2,n-2,....
,比如给定n=9 k=8
则数列可以是1 9 2 8 3 7 6 4 5
,可以看出这组数据差值是8 7 6 5 4 3 2 1
,如果给定k<n-1
,则将剩余的项用递增或者递减顺序即可。
Code
vector<int> constructArray(int n, int k)
{
vector<int> res;
for (int i = 1, j = n; i <= j;)
{
if (k > 1)
{
if (k % 2 == 0)
res.push_back(i++);
else
res.push_back(j--);
k--;
}
else
{
if (k % 2 == 0)
res.push_back(i++);
else
res.push_back(j--);
}
}
return res;
}