记忆函数 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 
 */
相关推荐
吃糖的小孩1 小时前
从只读页面到可控真实探针:我如何给 Owner Console 加手动诊断
前端
谷无姜1 小时前
为什么你的性能优化无效?可能是"木桶效应"在作祟
前端·性能优化
雾非雾1 小时前
《基于具身交互智能数字人技术:如何打造AI数字人宣讲平台"红厅智播”》
前端
Revolution611 小时前
一段 JavaScript 代码执行时,到底发生了什么
前端·javascript
智能起源1 小时前
关于元素层级过多,导致压祯的问题(使用winform或者WPF应用的webview组件嵌套网页时,动效卡顿问题)
前端
Old Uncle Tom2 小时前
银行用户画像 -- 金融目标与需求意图
前端·人工智能·金融
IT_陈寒2 小时前
Vue的响应式让我加班到凌晨3点,原来问题出在这
前端·人工智能·后端
东方小月2 小时前
从0开发一个 Coding Agent(一):前言
前端·人工智能·typescript
恋猫de小郭2 小时前
Flutter 全新真 3D 实现,用 flutter_scene 能开发一个「我的世界」
android·前端·flutter