不难看出题目描述里的递归思路,不断地分成小区间递归:
class Solution {
public:
// 最大值下标
int max(vector<int> &nums, int low, int high){
int max_index = low;
for(int i = low+1; i <= high; ++i){
if(nums[i] > nums[max_index]) max_index = i;
}
return max_index;
}
TreeNode* construct(vector<int> &nums, int low, int high){
if(low > high) return NULL;
int max_index = max(nums, low, high);
auto root = new TreeNode(nums[max_index]);//root节点用来存储当前最大值
root->left = construct(nums, low, max_index-1);
root->right = construct(nums, max_index+1, high);
return root;
}
TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
return construct(nums, 0, nums.size()-1);
}
};
复杂度有点高,暂时也没有想到比较好的办法。。