c++中函数参数作为引用效率会有差距?

记录一下,今天做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开辟的是这个向量的内存,远远大于地址的内存。

可能就是这个原因吧!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值