记忆函数 II 题解

题目链接

2630. 记忆函数 II - 力扣(LeetCode)

思路

题目所提到 === 相等才给出缓存的结果,那么我们用 hash 的想法,给每个参数记录下来

=== 对于简单数据类型 ------ 值相等 ,类型相等即可 对于复杂数据类型 ------ 需要是指向同一个对象

这里采取的 hash 是拿 map 的 size 进行记录到 idPool 这个map里面,表示参数是否已经记录过了

最后 我们给 传递进来的参数 hash 在 代码里面也就是 getId 一下,拼接对应的 id 成一个 字符串即可

题解

javascript 复制代码
/**
 * @param {Function} fn
 * @return {Function}
 */
function memoize(fn) {

    let cache = new Map()
    let idPool = new Map()

    function getId(obj) {
        if (idPool.has(obj)) {
            return idPool.get(obj)
        }
        let id = idPool.size
        idPool.set(obj, id)
        return id
    }

    return function () {
        const key = Object.values(arguments).map(getId).join('-')

        if (cache.has(key)) {
            return cache.get(key)
        }

        let value = fn.apply(this, Object.values(arguments))
        cache.set(key, value)
        return value
    }
}


/** 
 * let callCount = 0;
 * const memoizedFn = memoize(function (a, b) {
 *	 callCount += 1;
 *   return a + b;
 * })
 * memoizedFn(2, 3) // 5
 * memoizedFn(2, 3) // 5
 * console.log(callCount) // 1 
 */
相关推荐
CHANG_THE_WORLD16 分钟前
模拟解析:宽度数组 `[1,2,1]`,10个条目的 XRef 流
java·前端·算法
禅思院21 分钟前
探索Vite深入 Rollup 分块插件:从零实现一个智能分包工具
前端·前端框架·vite
xinzheng新政23 分钟前
Javascript·深入学习基础知识2
开发语言·javascript·学习
咕噜签名-铁蛋31 分钟前
腾讯云ICP备案:变更主体&备案准备
前端·云计算·腾讯云
小码哥_常33 分钟前
解锁Android黑科技:动态加载Activity,让你的App秒变变形金刚
前端
筱璦36 分钟前
期货软件开发 - 策略编辑
前端·区块链·交易·期货
奔跑的呱呱牛1 小时前
前端/Node.js操作Excel实战:使用@giszhc/xlsx(导入+导出全流程)
前端·node.js·excel·xlsx·sheetjs
之歆1 小时前
Composition API 深度解析 - 重新理解 Vue 的组件化编程
前端·javascript·vue.js
Cxiaomu1 小时前
React Native 双端一体工程,如何实现分端运行与分端打包?
javascript·react native·react.js
踩着两条虫1 小时前
从一行代码到一个生态:VTJ.PRO的创作之路
前端·低代码·ai编程