Menu
CoddyTech

Sliding Window Maximum

Bạn được cung cấp một mảng số nguyên nums và kích thước cửa sổ k. Một cửa sổ gồm k giá trị liên tiếp bắt đầu từ đầu bên trái và dịch sang phải từng vị trí một cho đến khi cạnh phải nằm ở giá trị cuối cùng. Hãy trả về giá trị lớn nhất trong cửa sổ ở mỗi vị trí, từ trái sang phải: n-k+1 giá trị đối với một mảng có độ dài n.

Hàm

maxSlidingWindow(nums: integer-array, k: integer) → integer-array
numsinteger-array
mảng mà cửa sổ trượt qua
kinteger
số lượng giá trị trong mỗi cửa sổ
Trả vềinteger-array
giá trị lớn nhất của mỗi cửa sổ, từ cửa sổ ngoài cùng bên trái đến cửa sổ ngoài cùng bên phải

Ràng buộc

  • 1 ≤ k ≤ nums.length ≤ 2 × 104
  • -104 ≤ nums[i] ≤ 104
  • Kết quả chứa nums.length-k+1 giá trị, mỗi cửa sổ có một giá trị, theo thứ tự từ trái sang phải.

Ví dụ

Đầu vào
nums = [4, 2, 12, 3, 8, 5, 1]k = 3
Đầu ra
[12, 12, 12, 8, 8]
Giải thích
12 nằm trong ba cửa sổ đầu tiên, nên mỗi cửa sổ đều trả về 12. Sau khi 12 trượt ra ngoài, [3, 8, 5] và [8, 5, 1] đều có giá trị lớn nhất là 8.
challenge icon

Câu hỏi mở rộng

Bạn có thể xây dựng một hàng đợi hỗ trợ thêm giá trị vào cuối, xóa giá trị ở đầu và đọc giá trị lớn nhất hiện tại, mỗi thao tác đều có thời gian khấu hao O(1) không?

Đặt lại code
def maxSlidingWindow(nums, k):
    # Viết code ở đây

Kiểm thử #1

Kiểm thử #2

Kiểm thử #3

Đối số

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

Đầu ra mong đợi

[12, 12, 12, 8, 8]