Home > Web Front-end > JS Tutorial > Leetcode #Memoize

Leetcode #Memoize

Patricia Arquette
Release: 2024-10-02 06:43:30
Original
631 people have browsed it

Given a function fn, return a memoized version of that function.

A memoized function is a function that will never be called twice with the same inputs. Instead it will return a cached value.

You can assume there are 3 possible input functions: sum, fib, and factorial.

sum accepts two integers a and b and returns a b. Assume that if a value has already been cached for the arguments (b, a) where a != b, it cannot be used for the arguments (a, b). For example, if the arguments are (3, 2) and (2, 3), two separate calls should be made.
fib accepts a single integer n and returns 1 if n <= 1 or fib(n - 1) fib(n - 2) otherwise.
factorial accepts a single integer n and returns 1 if n <= 1 or factorial(n - 1) * n otherwise.

Example 1:

Input:

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

Output: [4,4,1,3,2]
Explanation:

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




</p>
<p><strong>Example 2:</strong></p>

<p><strong>Input:</strong><br>
</p>

<pre class="brush:php;toolbar:false">fnName = "factorial"
actions = ["call","call","call","getCallCount","call","getCallCount"]
values = [[2],[3],[2],[],[3],[]]
Copy after login

Output: [2,6,2,2,6,2]
Explanation:

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
Copy after login

Example 3:

Input:

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

Output: [8,1]
Explanation:

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

Constraints:

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

actions[i] is one of "call" and "getCallCount"
fnName is one of "sum", "factorial" and "fib"

Solution

Leetcode #Memoize

As you continue to develop and optimize your JavaScript applications, remember the power of memoization. By identifying the right functions to memoize and implementing the appropriate caching strategies, you can unlock significant performance gains and create a more seamless and responsive user experience for your customers.

I hope this article helps. If you like the article, please leave a like and feel free to leave any concerns on the comment section. That is all for today.

The above is the detailed content of Leetcode #Memoize. For more information, please follow other related articles on the PHP Chinese website!

source:dev.to
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template