Menu
CoddyTech

Sliding Window Maximum

Kamu mendapatkan array berisi bilangan bulat nums dan ukuran jendela k. Jendela dengan k nilai berurutan dimulai dari ujung kiri dan bergerak ke kanan satu posisi setiap kali, hingga tepi kanannya berada pada nilai terakhir. Kembalikan nilai terbesar di dalam jendela pada setiap posisi, dari kiri ke kanan: n-k+1 nilai untuk array dengan panjang n.

Fungsi

maxSlidingWindow(nums: integer-array, k: integer) → integer-array
numsinteger-array
array yang dilalui jendela
kinteger
jumlah nilai di setiap jendela
Mengembalikaninteger-array
nilai terbesar dari setiap jendela, dari jendela paling kiri hingga paling kanan

Batasan

  • 1 ≤ k ≤ nums.length ≤ 2 × 104
  • -104 ≤ nums[i] ≤ 104
  • Hasilnya menyimpan nums.length-k+1 nilai, satu untuk setiap jendela, berurutan dari kiri ke kanan.

Contoh

Input
nums = [4, 2, 12, 3, 8, 5, 1]k = 3
Output
[12, 12, 12, 8, 8]
Penjelasan
12 berada di dalam tiga jendela pertama, jadi masing-masing menjawab 12. Setelah 12 bergeser keluar, [3, 8, 5] dan [8, 5, 1] sama-sama memiliki 8 sebagai nilai terbesar.
challenge icon

Pertanyaan lanjutan

Bisakah kamu membuat queue yang mendukung penambahan nilai di bagian belakang, penghapusan nilai di bagian depan, dan pembacaan nilai maksimumnya saat ini, masing-masing dalam waktu amortisasi O(1)?

Reset kode
def maxSlidingWindow(nums, k):
    # Tulis kodemu di sini

Tes #1

Tes #2

Tes #3

Argumen

nums = [4, 2, 12, 3, 8, 5, 1]
k = 3

Output yang diharapkan

[12, 12, 12, 8, 8]