算法笔记(1)——编程过程中对已有变量的利用

最近,学习算法的过程中遇到了leetcode上的Leetcode79:单词搜索这道题,其实该题的难度并不高,中等medium,解题思路为BFS+DFS即可,可在最终运行时,发现自己的算法与给出的最佳答案之间存在巨大差异。

最佳答案的消耗为20ms,10.8MB,而我的算法消耗为400ms,113.8MB,时间及空间消耗均为最佳答案的10倍以上。如果我使用的是暴力破解,在解题思路上与最佳方案存在差异,则巨大的效率差距可以理解。但是,最佳答案与我的思路一样,相同思路条件下不可能存在如此巨大的效率差异。最后对自己的算法进行仔细查看,终于找到了问题所在。

//原函数
bool existDfs(int r,int c,int index,vector<vector<char>> board,string word,vector<vector<int>> &flag);
//新函数
bool existDfs(int r,int c,int index,vector<vector<char>> &board,string &word,vector<vector<int>> &flag);

上面两个函数的主要差别集中在board及word两个输入参数是否为引用类型,如果不是迭代或循环使用该函数,是否标注引用类型对效率影响并不大。可当涉及到循环或迭代后,每使用一次,则系统需要重新构建一个board向量,board越大,循环越多,对效率的影响越大。最后使用上述两个函数进行运行分析,原函数的消耗为400ms,113.8MB,新函数则为32ms,10.5MB,新函数的运行效率已十分接近于最佳方案的20ms,10.8MB。

因此,特地将该问题进行一下记录,要加强对已有变量的使用,在算法无法改进的情况下,多注意一下这样的小技巧,可以部分提升算法运行的效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值