Khó 0 đã giải Tỷ lệ chấp nhận 0%

Sliding Window Maximum

Report the maximum of every window of k numbers.

Bạn sẽ học được gì

  • Duy trì deque các ứng viên trong cửa sổ
  • Loại giá trị đã ra khỏi cửa sổ
  • Lấy max của mọi cửa sổ trong O(n)

Đề bài

Slide a window of size k across the list one step at a time and report the maximum inside each window. A deque keeps this O(n).

Implement window_maximums(numbers, k).

Input

numbers: The list of integers. k: The window size.

Output

Return the maximum of each window, left to right.

Ràng buộc

1 ≤ k ≤ length ≤ 200,000

Ví dụ

Ví dụ 1
Đầu vào:
k = 3
numbers = [1, 3, -1, -3, 5, 3, 6, 7]

Kết quả mong đợi:
expected = [3, 3, 5, 5, 6, 7]
Đầu vào:
long long k = 3;
std::vector<long long> numbers = {1, 3, -1, -3, 5, 3, 6, 7};

Kết quả mong đợi:
std::vector<long long> expected = {3, 3, 5, 5, 6, 7};
Đầu vào:
long k = 3;
long[] numbers = new long[] {1, 3, -1, -3, 5, 3, 6, 7};

Kết quả mong đợi:
long[] expected = new long[] {3, 3, 5, 5, 6, 7};

Giải thích

Windows [1,3,-1], [3,-1,-3], [-1,-3,5], … have maxima 3, 3, 5, 5, 6, 7.

Ví dụ 2
Đầu vào:
k = 1
numbers = [4, 2]

Kết quả mong đợi:
expected = [4, 2]
Đầu vào:
long long k = 1;
std::vector<long long> numbers = {4, 2};

Kết quả mong đợi:
std::vector<long long> expected = {4, 2};
Đầu vào:
long k = 1;
long[] numbers = new long[] {4, 2};

Kết quả mong đợi:
long[] expected = new long[] {4, 2};

Giải thích

Windows of one element are the elements themselves: [4, 2].

Hướng tiếp cận

Hãy tự thử trước, sau đó mở từng gợi ý một.

Gợi ý 1

Giá trị lớn nhất có thể biến mất khi nó rời cửa sổ, nên bạn cần cấu trúc cập nhật theo cả giá trị lẫn chỉ số.

Gợi ý 2

Giữ các chỉ số ứng viên theo thứ tự giảm dần của giá trị, và loại bỏ mọi phần tử nằm ngoài cửa sổ hiện tại.

Gợi ý 3

Lưu ý cửa sổ đầu tiên đầy đủ và cửa sổ kích thước 1; mọi kết quả phải ứng với một cửa sổ hoàn chỉnh.

Độ phức tạp mong đợi

thời gian O(n), bộ nhớ phụ O(k)

Tham khảo

Thử thách này đã được điều chỉnh cho CodeUtility. Hãy làm theo đề bài và các ràng buộc ở trên.

Học hỏi từ người khác

Giải pháp cộng đồng

Chưa có giải pháp nào được chia sẻ. Hãy giải thử thách này để đăng giải pháp đầu tiên.