667. 优美的排列 II
难度中等78收藏分享切换为英文接收动态反馈
给定两个整数 n
和 k
,你需要实现一个数组,这个数组包含从 1
到 n
的 n
个不同整数,同时满足以下条件:
① 如果这个数组是 [a1, a2, a3, … , an] ,那么数组 [|a1 - a2|, |a2 - a3|, |a3 - a4|, … , |an-1 - an|] 中应该有且仅有 k 个不同整数;.
② 如果存在多种答案,你只需实现并返回其中任意一种.
示例 1:
1 | 输入: n = 3, k = 1 |
示例 2:
1 | 输入: n = 3, k = 2 |
提示:
n
和k
满足条件 1 <= k < n <= 104.
找规律
当 $\text{k=n-1}$ 时,有效的构造是 $\text{[1, n, 2, n-1, 3, n-2, ….]}$。我们需要 $\text{n-1}$ 个的不同的相邻整数差,这意味着我们需要 $\text{1}$ 和 $\text{n}$ 相邻;然后,我们需要 $\text{n-2}$ 的差异以此类推。
另外,当 $\text{k=1}$ 时,有效的构造是 $\text{[1, 2, 3, …, n]}$。所以我们有一个构造,我们可以将 $\text{k=n-1}$ 和 $\text{k=1}$ 的构造方法结合起来。我们可以先构造 $\text{k=1}$ 的序列 $\text{[1,2,…,n-k-1]}$,这样剩下需要构造的序列的长度 $\text{n}$ 实际上就是 $\text{k+1}$,然后用 $\text{k=n-1}$ 方法完成构造。
例如,当 $\text{n=6}$ 和 $\text{k=3}$ 时,我们将数组构造为 $\text{[1, 2, 3, 6, 4, 5]}$。这包括两部分:构造 $\text{[1,2]}$ 和构造 $\text{[1,4,2,3]}$,其中每个元素都添加了 $\text{2}$(即 $\text{[3,6,4,5]}$)。
算法:
和上面说的一样,先构造 $\text{[1,2,…,n-k-1]}$。剩下的 $\text{k+1}$ 个元素是 $\text{[n-k,n-k+1,…,n]}$,我们将按头尾顺序交替写入。
1 | class Solution { |
参考文献
作者:LeetCode
链接来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。