932. Beautiful Array
题解
本题属于构造类题目,构造类题目通常比较难。。。属于脑筋急转弯类型。
对于本题来说,如果一个数组{a1, a2, …, an}是漂亮数组,那么{ta1 + b, ta2 + b, …, tan +b}也是漂亮数组。
所以我们递归构造,我们把数组分为两部分,假设左半边可以得到一个漂亮数组,右半边可以得到一个漂亮数组。因此我们只需要使得当i在左边,j在右边,中间的所有元素k,不满足nums[k] 2 != nums[i] + nums[j]。
我们令左边的数=2x - 1,右边的数是2 x,这样左边一个数加上右边一个数,一定是奇数,所以不存在nums[k] 2 != nums[i] + nums[j]的情况。
代码
class Solution {public:vector<int> beautifulArray(int n) {if (n == 1) return {1};auto left = beautifulArray((n + 1) / 2);auto right = beautifulArray(n / 2);vector<int> res;for (auto x: left) {res.push_back(2 * x - 1);}cout << endl;for (auto x: right) {res.push_back(2 * x);}return res;}};
