Letcode #Memoize

Patricia Arquette
Patricia Arquetteasal
2024-10-02 06:43:30648semak imbas

Memandangkan fungsi fn, kembalikan versi dihafal bagi fungsi itu.

Fungsi dihafal ialah fungsi yang tidak akan dipanggil dua kali dengan input yang sama. Sebaliknya ia akan mengembalikan nilai cache.

Anda boleh menganggap terdapat 3 kemungkinan fungsi input: jumlah, fib dan faktorial.

jumlah menerima dua integer a dan b dan mengembalikan a b. Andaikan bahawa jika nilai telah dicache untuk argumen (b, a) di mana a != b, ia tidak boleh digunakan untuk argumen (a, b). Contohnya, jika hujahnya ialah (3, 2) dan (2, 3), dua panggilan berasingan harus dibuat.
fib menerima integer tunggal n dan mengembalikan 1 jika n <= 1 atau fib(n - 1) fib(n - 2) sebaliknya.
faktorial menerima integer tunggal n dan mengembalikan 1 jika n <= 1 atau faktorial(n - 1) * n sebaliknya.

Contoh 1:

Input:

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

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

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>Contoh 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],[]]

Output: [2,6,2,2,6,2]
Penjelasan:

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

Contoh 3:

Input:

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

Output: [8,1]
Penjelasan:

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

Kekangan:

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

tindakan[i] ialah salah satu daripada "panggilan" dan "getCallCount"
fnName ialah salah satu daripada "jumlah", "faktorial" dan "fib"

Penyelesaian

Leetcode #Memoize

Sambil anda terus membangunkan dan mengoptimumkan aplikasi JavaScript anda, ingat kuasa penghafalan. Dengan mengenal pasti fungsi yang betul untuk menghafal dan melaksanakan strategi caching yang sesuai, anda boleh membuka kunci keuntungan prestasi yang ketara dan mencipta pengalaman pengguna yang lebih lancar dan responsif untuk pelanggan anda.

Saya harap artikel ini membantu. Jika anda menyukai artikel tersebut, sila tinggalkan suka dan jangan ragu untuk meninggalkan sebarang kebimbangan di bahagian komen. Itu sahaja untuk hari ini.

Atas ialah kandungan terperinci Letcode #Memoize. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn