14. 实现`memo()`
分享给更多人
中等难度 -通过 / -执行
Memoization 是应用广泛的性能优化的手段,如果你开发过React应用,你一定不会对React.memo
感到陌生。
Memoization在算法题目中也经常用到,如果你可以用递归解决某个问题,那么很多时候加上Memoization可以得到更好的解法,甚至最终引导到动态规划的解法。
那么,请实现你自己的memo()
函数。传入相同的参数的时候,直接返回上一次的结果而不经过计算。
const func = (arg1, arg2) => { return arg1 + arg2}const memoed = memo(func)memoed(1, 2) // 3, func 被调用memoed(1, 2) // 3,func 未被调用 memoed(1, 3)// 4,新参数,func 被调用
参数有可能不是字符串,所以你的memo()
需要能接受第三个决定缓存key的参数,有点类似于_.memoize() 。
const memoed = memo(func, () => 'samekey')memoed(1, 2) // 3,func被调用,缓存key是 'samekey'memoed(1, 2) // 3,因为key是一样的,3被直接返回,func未调用memoed(1, 3) // 3,因为key是一样的,3被直接返回,func未调用
默认的key可以用Array.from(arguments).join('_')
。
注意
这是一种空间换时间的优化,在实际面试中,请仔细分析时间空间复杂度。