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;
}
};
针对给定整数n和k,本篇介绍一种算法来构造一个由1到n的不同正整数组成的列表,该列表相邻元素之差的绝对值恰好包含k种不同数值。通过1、k+1、2、k、3...这样的排列方式,可以确保得到的差值为k、k-1...1。

428

被折叠的 条评论
为什么被折叠?



