题目描述
生成长度为size的达标数组,什么叫达标?
达标:对于任意的i< k < j,满足[i]+[j]=[k]*2
给定一个正数size,返回长度为size的达标数组
题目解析
像这样的题目,传统思路是分治,将数据分为两部分,先搞定左边,然后搞定右边,最后整合:
- 左边的奇数域,右边的偶数域,一个奇数+偶数不可能是某个数的两倍
class Solution {
public:
std::vector<int> makeNo(int size){
if(size == 1){
return {1};
}
int halfSize = (size + 1) / 2;
auto base = makeNo(halfSize);
// size
// 一半长达标来
// 7 : 4
// 8 : 4
// [4个奇数] [3个偶]
std::vector<int> ans(size);
int index = 0;
for (; index < halfSize; index++) {
ans[index] = base[index] * 2 - 1;
}
for (int i = 0; index < size; index++, i++) {
ans[index] = base[i] * 2;
}
return ans;
}
};
对数器