这个题第一想法就是递归,然后就写下了下面的代码。分成两部分,然后分别对两部分递归。
TreeNode* util(vector<int>& nums, int left, int right) {
if (left > right) return NULL;
int max = INT_MIN;
int index = right;
for (int i = left ; i <= right ; i++) {
if (nums[i] > max) {
max = nums[i];
index = i;
}
}
TreeNode *root = new TreeNode(nums[index]);
root->left = util(nums, left, index - 1);
root->right = util(nums, index + 1, right);
return root;
}
TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
return util(nums, 0, nums.size() - 1);
}
但是这个算法效率有些低下,高效率的可以去看discuss。