πŸ’‘Π—Π°Π΄Π°Ρ‡Π° "Максимально Ρ€Π°Π·Π΄Π²ΠΈΠΆΠ½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ"

πŸ’‘Π—Π°Π΄Π°Ρ‡Π° "Максимально Ρ€Π°Π·Π΄Π²ΠΈΠΆΠ½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ"

@javascriptv

УсловиС: Π΄Π°Π½ цСлочислСнный массив, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ k подмассива, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰Π΅Π³ΠΎΡΡ ΠΎΡ‚ Π»Π΅Π²ΠΎΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹, ΠΈ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎΡΡ Π² процСссС выполнСния Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Ρƒ ΠΏΡ€Π°Π²ΠΎΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹. На ΠΊΠ°ΠΆΠ΄ΠΎΠΌ шагС ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ k ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰Π΅Π³ΠΎ массива. На ΠΊΠ°ΠΆΠ΄ΠΎΠΌ шагС Π½Π°Π΄ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ максимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰Π΅Π³ΠΎ.


ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

Π’Π²ΠΎΠ΄: nums = [1,3,-1,-3,5,3,6,7], k = 3

Π’Ρ‹Π²ΠΎΠ΄: [3,3,5,5,6,7]

ОбъяснСниС:

Π‘ΠΊΠΎΠ»ΡŒΠ·ΡΡ‰Π΅Π΅ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈΒ Β Max

--------------------------Β Β -----

[1Β 3Β -1] -3Β 5Β 3Β 6Β 7 Β Β Β 3

Β 1 [3Β -1Β -3] 5Β 3Β 6Β 7 Β Β Β 3

Β 1Β 3 [-1Β -3Β 5] 3Β 6Β 7Β Β Β Β 5

Β 1Β 3Β -1 [-3Β 5Β 3] 6Β 7 Β Β Β 5

Β 1Β 3Β -1Β -3 [5Β 3Β 6] 7 Β Β Β 6

Β 1Β 3Β -1Β -3Β 5 [3Β 6Β 7]Β Β Β 7


Π’Π²ΠΎΠ΄: nums = [1], k = 1

Π’Ρ‹Π²ΠΎΠ΄: [1]


РСшСниС:
ΠŸΠΎΠ΄Ρ…ΠΎΠ΄

ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ с ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ - удаляСм, ΠΊΠΎΠ³Π΄Π° трСбуСтся, ΠΊΠΎΠ³Π΄Π° максимальная Π΄Π»ΠΈΠ½Π° ΠΎΠΊΠ½Π° Π½Π΅ достигаСт максимума

ΠœΠΎΠ½ΠΎΡ‚ΠΎΠ½Π½Π°Ρ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ - удаляСм малСнькиС слСва, ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ продвиТСния Π½Π°ΠΏΡ€Π°Π²ΠΎ

Код:
1

var maxSlidingWindow = function (a, wLen) {
    let n = a.length,
        pq = new PriorityQueue({
            compare: (a, b) => b[1] - a[1] || b[0] - a[0],
        }),
        ans = [];

    for (let R = 0; R < n; R++) {
        pq.enqueue([R, a[R]]);
        if (R < wLen - 1) continue;

        while (pq.front()[0] <= R - wLen) {
            pq.dequeue();
        }
        ans.push(pq.front()[1]);
    }
    return ans;
};

2

var maxSlidingWindow = function (a, wLen) {
    let n = a.length,
        q = [],
        ans = [];

    for (let R = 0; R < n; R++) {
        while (q.length && a[R] >= q[q.length - 1][1]) {
            q.pop();
        }
        q.push([R, a[R]]);
        if (R < wLen - 1) continue;

        while (q[0][0] <= R - wLen) {
            q.shift();
        }
        ans.push(q[0][1]);
    }
    return ans;
};



Report Page