932. Beautiful Array

几乎不可能自己想出来的答案。
https://leetcode.com/problems/beautiful-array/discuss/186679/Odd-%2B-Even-Pattern-O(N)
重要的几点:
1.分治。而且分成奇数和偶数部分,这样就不会有merge的问题。
2.几个性质:
一个beautiful array经过下面的操作之后,仍然是beautiful的。
1)删除其中元素
2)每个元素都乘以某个值(非零)
3)每个元素都加上某个值
这样的话,我们就可以从最小的beautiful array开始一步一步扩大:
将它从1~n变为从1~2n,而且奇数在前面,偶数在后面。
class Solution {
public:
vector<int> beautifulArray(int N) {
vector<int> ret{1};
while (ret.size() < N) {
vector<int> temp;
for (int i : ret)
if (2*i-1 <= N)
temp.push_back(2*i-1);
for (int i : ret)
if (2*i <= N)
temp.push_back(2*i);
ret.swap(temp);
}
return ret;
}
};
浙公网安备 33010602011771号