标签(空格分隔): leetcode
1.原题
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.
2.分析:
只需要输出其中一种,所以,最直接的方法就是凑K出来就行。
注意到 1 <= k < n
也就是提示,range(n)一共最多有k种这类的差值,[(1, n), (2, n-1), (3, n-2)……]
3.代码实现过程中的一些坑:
当k是奇数的时候, 在排好k-1个差值的序列后, 接下来的值需要按照升序排
当k是偶数的时候, 在排好k-1个差值的序列后,接下来的值需要按照降序排
n = 5, k = 2
[1,5] + [4, 3, 2]
n = 5, k = 3
[1,5,2] + [3, 4]
4. 代码
class Solution {
public:
vector<int> constructArray(int n, int k) {
vector<int> ans;
int j = 1;
for (int i = 1; i <= k; i++){
if (i%2){
ans.push_back(j);
j++;
}
else {
ans.push_back(n - j + 2);
}
}
if (k%2){
for (int i = k+1; i <= n; i++){
ans.push_back(j++);
}
}
else {
j = n-j+1;
for (int i = k+1; i <= n; i++){
ans.push_back(j--);
}
}
return ans;
}
};