记录一下,今天做leetcode的题
将有序数组转换为二叉搜索树
题目链接将有序数组转换为二叉树
写了一个二分查找的函数,传递了一个vector向量。代码是这样的:
class Solution {
public:
TreeNode* __sortedArrayToBST(vector<int>nums,int l,int r)
{
if(l>r)
return NULL;
int mid = (r-l)/2+l;
TreeNode* node = new TreeNode(nums[mid]);
node->left = __sortedArrayToBST(nums,l,mid-1);
node->right = __sortedArrayToBST(nums,mid+1,r);
return node;
}
TreeNode* sortedArrayToBST(vector<int>& nums) {
return __sortedArrayToBST(nums,0,nums.size()-1);
}
};
函数
TreeNode* __sortedArrayToBST(vector<int>nums,int l,int r)
nums参数直接进行传递,结果运行效率很低用时500ms
提交后发现,其他人的思路都和我一样,然后开始找不同,发现他们都是将nums引用作为参数
定义成这样
TreeNode* __sortedArrayToBST(vector<int>&nums,int l,int r)
然后,运行用时24ms,这完全不是一个量级
回去好好思考一下,这是为什么
简单看了一下,调用函数的时候都会在栈中开辟内存。
引用是传递的地址,开辟的是地址的内存。而值传递传递nums开辟的是这个向量的内存,远远大于地址的内存。
可能就是这个原因吧!