gpt4 book ai didi

c++ - 为什么类似解决方案的运行时间如此不同?

转载 作者:行者123 更新时间:2023-11-30 02:38:54 25 4
gpt4 key购买 nike

有一个problem在 LeetCode 中。我使用一个简单的递归解决方案来解决它,但是运行时间很长,有 170 毫秒。然后我发现了一个类似的solution ,这也是递归的,其运行时间仅为 10 毫秒左右。为什么?

我的解决方案:

class Solution
{
public:
bool isBalanced(TreeNode* root)
{
if (root == nullptr)
return true;

bool left = isBalanced(root->left);
bool right = isBalanced(root->right);

bool curr = false;
int sub = height(root->left) - height(root->right);
if (sub < 2 && sub > -2)
curr = true;

return left && right && curr;
}

private:
int height(TreeNode* root)
{
if (root == nullptr)
return 0;

int leftHeight = height(root->left);
int rightHeight = height(root->right);
return (leftHeight > rightHeight) ? (leftHeight + 1) : (rightHeight + 1);
}
};

我找到的快速解决方案:

class Solution {
public:
bool isBalanced(TreeNode *root) {
if (root==NULL) return true;

int left = treeDepth(root->left);
int right = treeDepth(root->right);

if (left-right>1 || left-right < -1) {
return false;
}
return isBalanced(root->left) && isBalanced(root->right);
}

int treeDepth(TreeNode *root) {
if (root==NULL){
return 0;
}

int left=1, right=1;

left += treeDepth(root->left);
right += treeDepth(root->right);

return left>right?left:right;
}

};

谢谢!

最佳答案

您的解决方案同时调用 isBalancedheight总是。对于树中的每个节点。

更快的解决方案为每个节点调用 treeDepth,但提前退出并且如果知道树不平衡则不调用 isBalanced。不调用不必要的(递归/昂贵的)函数是一种优化。

关于c++ - 为什么类似解决方案的运行时间如此不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30339651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com