分治法(递归实现)
题目详情
对于某些固定的 N
,如果数组 A
是整数 1, 2, ..., N
组成的排列,使得:
对于每个 i < j
,都不存在 k
满足i < k < j
使得 A[k] * 2 = A[i] + A[j]
。
那么数组 A
是漂亮数组。
给定 N
,返回任意漂亮数组 A
(保证存在一个)。
示例1:
输入:4
输出:[2,1,4,3]
示例2:
输入:5
输出:[3,1,2,5,4]
思路:
以5为例画出分治法的"分治图":
我的代码:
/* 结论:
* <1> A 是漂亮数组,则 a * A + b 也是漂亮数组
* <2> A 为奇数漂亮数组,B 为偶数漂亮数组,A + B 为漂亮数组
* <3>数组两两配对,左数组 * 2 - 1 一定是奇数组,右数组 * 2 一定为偶数组,合并一定为漂亮数组
* 假设 [1] 是最小漂亮数组,按照上面规律递推得到的一定是漂亮数组。
* |1|1|1|1|1|1|1|1|
* |1 2|1 2|1 2|1 2|
* |1 3 2 4|1 3 2 4|
* |1 5 3 7 2 6 4 8|
*/
cl