186. Reverse Words in a String II
class Solution {
public :
void reverseWords(string &s) {
reverse(s.begin(), s.end());
for (int i = 0 , j = 0 ; j <= s.size(); j++) {
if (j == s.size() || s[j] == ' ' ) {
reverse(s.begin() + i, s.begin() + j);
i = j + 1 ;
}
}
}
};
333. Largest BST Subtree
class Solution {
private :
tuple<int , int , int > dfs(TreeNode *root, int &ret) {
if (!root)
return make_tuple(0 , INT_MAX, INT_MIN);
int left_size, left_mn, left_mx;
tie(left_size, left_mn, left_mx) = dfs(root->left, ret);
int right_size, right_mn, right_mx;
tie(right_size, right_mn, right_mx) = dfs(root->right, ret);
if (left_mx < root->val && root->val < right_mn) {
int size = 1 + left_size + right_size;
int mn = min(root->val, left_mn), mx = max(root->val, right_mx);
ret = max(size, ret);
return make_tuple(size, mn, mx);
}
return make_tuple(0 , INT_MIN, INT_MAX);
}
public :
int largestBSTSubtree(TreeNode* root) {
int ret = 0 ;
dfs(root, ret);
return ret;
}
};