我举个例子,比如这题,旋转数组:https://leetcode-cn.com/probl...这里我用JavaScript语言来实现,先不看算法写的好不好,就看一下实现方式的对比。我写的第一种解法是:varrotate=function(nums,k){letlen=nums.length;for(leti=0;i0;j--){nums[j]=nums[j-1];}nums[0]=last;}};这样的算法有个好处,就是语言移植性很好,每个语言都有for循环,算法里面也没有用语言提供的函数。作为对比,使用语言提供的函数来写另外一种解法:varrotate=function(nums,k){varprev=nums.slice(0,nums.length-3);constremain=nums.slice(nums.length-3);//两数组连接起来constnewArr=remain.concat(prev);for(leti=0;i
2 回答
慕丝7291255
TA贡献1859条经验 获得超6个赞
用和不用内置函数,其实是表面的。算法,通常我们考虑时间复杂度、空间复杂度。本身来说,算法是脱离语言的,和语言没有任何关系的。通常设计一个算法,用内置函数,那你得明白内置函数的实现原理、复杂度等,这样才能衡量你设计的算法的复杂度。就比如一个JS里(不考虑稀疏数组的话)push函数,时间复杂度摊销O(1),unshift函数,时间复杂度O(n),这些函数可以用,但是在衡量算法优劣指标的时候,要考虑这些因素的影响,以及自己实现会不会比内置函数更优。至于移植性,在不同语言之间通常是不存在的,也是不考虑的。移植性通常是对于同一门语言在不同平台之间。
杨__羊羊
TA贡献1943条经验 获得超7个赞
算法题的核心是锻炼你的解题思维,所以用不用语言内置函数并不是重点。并且我们在实际处理的时候,应该写出无数种能想到的算法方式,从中挑选更优的,如果更优的解法包含内置函数,那也应该选取内置函数的。
添加回答
举报
0/150
提交
取消