932. 漂亮数组
题目描述
如果长度为 n
的数组 nums
满足下述条件,则认为该数组是一个 漂亮数组 :
nums
是由范围[1, n]
的整数组成的一个排列。- 对于每个
0 <= i < j < n
,均不存在下标k
(i < k < j
)使得2 * nums[k] == nums[i] + nums[j]
。
给你整数 n
,返回长度为 n
的任一 漂亮数组 。本题保证对于给定的 n
至少存在一个有效答案。
示例 1 :
输入:n = 4 输出:[2,1,4,3]
示例 2 :
输入:n = 5 输出:[3,1,2,5,4]
提示:
1 <= n <= 1000
解法
方法一:分治
根据题意,漂亮数组 $A$ 需要满足对于任意 $i<k<j$, $A_k*2 \neq A_i+A_j$。
我们可以发现,不等式左侧一定是偶数,那么我们只要保证不等式右侧 $A_i$ 和 $A_j$ 分别是一奇一偶,那么不等式就恒成立。
利用分治,我们将 $n$ 缩小规模为原来的一半,递归调用,可以得到两个漂亮数组 $left$, $right$。我们将 $left$ 中每个元素 $x_i$ 变为 $x_i2-1$ 可以得到一个奇数数组;将 $right$ 中每个元素 $x_i$ 变为 $x_i2$,可以得到一个偶数数组。这两个数组仍然是漂亮数组。
基于一个性质,将漂亮数组中的每个元素 $x_i$ 变换为 $kx_i+b$,得到的数组仍然是漂亮数组。
将这两个漂亮数组合并在一起,由于满足一奇一偶,那么合并后的数组也是漂亮数组,从而得到了答案。
时间复杂度 $O(nlogn)$。
1 2 3 4 5 6 7 8 9 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|