ホームページ  >  記事  >  ウェブフロントエンド  >  Leetcode #Memoize

Leetcode #Memoize

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-02 06:43:30605ブラウズ

関数 fn を指定すると、その関数の メモ化された バージョンを返します。

メモ化された 関数は、同じ入力で 2 回呼び出されることがない関数です。代わりに、キャッシュされた値を返します。

可能な入力関数は、sum、fib、factorial の 3 つであると仮定できます。

sum は 2 つの整数 a と b を受け入れ、b を返します。 a != b である引数 (b, a) の値がすでにキャッシュされている場合、その値を引数 (a, b) に使用することはできないとします。たとえば、引数が (3, 2) と (2, 3) の場合、2 つの別々の呼び出しを行う必要があります。
fib は単一の整数 n を受け入れ、n 階乗は単一の整数 n を受け入れ、n

例 1:

入力:

fnName = "sum"
actions = ["call","call","getCallCount","call","getCallCount"]
values = [[2,2],[2,2],[],[1,2],[]]

出力: [4,4,1,3,2]
説明:

const sum = (a, b) => a + b;
const memoizedSum = memoize(sum);
memoizedSum(2, 2); // "call" - returns 4. sum() was called as (2, 2) was not seen before.
memoizedSum(2, 2); // "call" - returns 4. However sum() was not called because the same inputs were seen before.
// "getCallCount" - total call count: 1
memoizedSum(1, 2); // "call" - returns 3. sum() was called as (1, 2) was not seen before.
// "getCallCount" - total call count: 2

例 2:

入力:

fnName = "factorial"
actions = ["call","call","call","getCallCount","call","getCallCount"]
values = [[2],[3],[2],[],[3],[]]

出力: [2,6,2,2,6,2]
説明:

const factorial = (n) => (n <= 1) ? 1 : (n * factorial(n - 1));
const memoFactorial = memoize(factorial);
memoFactorial(2); // "call" - returns 2.
memoFactorial(3); // "call" - returns 6.
memoFactorial(2); // "call" - returns 2. However factorial was not called because 2 was seen before.
// "getCallCount" - total call count: 2
memoFactorial(3); // "call" - returns 6. However factorial was not called because 3 was seen before.
// "getCallCount" - total call count: 2

例 3:

入力:

fnName = "fib"
actions = ["call","getCallCount"]
values = [[5],[]]

出力: [8,1]
説明:

fib(5) = 8 // "call"
// "getCallCount" - total call count: 1

制約:

> 0 <= a, b <= 105
> 1 <= n <= 10
> 0 <= actions.length <= 105
> actions.length === values.length

actions[i] は「call」または「getCallCount」のいずれかです
fnName は「sum」、「factorial」、「fib」のいずれかです

解決策

Leetcode #Memoize

JavaScript アプリケーションの開発と最適化を続けるときは、メモ化の力を思い出してください。メモ化する適切な関数を特定し、適切なキャッシュ戦略を実装することで、パフォーマンスを大幅に向上させ、顧客にとってよりシームレスで応答性の高いユーザー エクスペリエンスを生み出すことができます。

この記事がお役に立てば幸いです。記事が気に入ったら、「いいね!」を残し、コメント欄に遠慮なく質問を残してください。今日はここまでです。

以上がLeetcode #Memoizeの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。